Python排队整数除法

2024-04-20 05:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

import math
import random

m = 1.5 #mu
l = 2 #lambda
c = 3 #control/number of servers

def single(m, l, c):
    p = (l/m)
    Po = (1-(l/m))
    Ls = (l/(m-l))
    Ws = (1/(m-l))
    Wq = (l/(m*(m-l)))
    Lq = (l**2/(m*(m-l)))
    return(p, Po, Ls, Ws, Wq, Lq)

def multi(m, lm, mu):
    rho=lm/mu
    n=0
    sm=0
    while(n<=m-1):
            sm=(1/math.factorial(n))*pow(rho,n)

            n+=1

    sm = sm + 1/(1/math.factorial(m))*(pow(rho,m)*m*mu/(m*mu-lm))
    lS=lm*mu*pow(rho,m)/((math.factorial(m-1)*(m*mu-lm)**2))*(1/sm)+rho
    lQ=lS-rho
    #Po = 1/sm
    return(lq, ls)

singReturn=single(m, l, c)
multiReturn=multi(3, 2, 1.5)

print("SINGLE SERVER QUEUEING")
print("-----------------------")
print("p: %4.4f \nPo: %4.4f \nLs: %4.4f \nWs: %4.4f \nWq: %4.4f \nLq: %4.4f"%singReturn)

我被退回并出错:

Traceback (most recent call last):
  File "/home/schnipdip/Desktop/final_part1_chris_herzog.py", line 35, in <module>
    multiReturn=multi(3, 2, 1.5)
  File "/home/_____/Desktop/final_part1_.py", line 28, in multi
    sm = sm + 1/(1/math.factorial(m))*(pow(rho,m)*m*mu/(m*mu-lm))
ZeroDivisionError: integer division or modulo by zero

我试图找到SM的值,然后将其转换为Po变量。while循环通过m(或c)-1控制有多少个服务器。 我更改了循环中的变量,以查看该变量是否在内存中被以前的值覆盖,而不是出于任何原因重置。我敢肯定这与此事无关。你知道吗


Tags: importwsdefmathmultilspolm
1条回答
网友
1楼 · 发布于 2024-04-20 05:26:56

如果您使用的是Python2,可能是由于以下原因:

... 1/(1/math.factorial(m)) ...

从逻辑上讲,它没有多大意义:从数学上讲,1/(1/x)只是一种笨拙的方式来拼写普通的x。所以我打赌你的代码有逻辑错误。你知道吗

但是,在Python 2中,它也有一个编程错误:/应用于整数在Python 2中截断整数除法:

>>> import math
>>> m = 3
>>> math.factorial(m)
6
>>> 1 / math.factorial(m)
0

为了防止这种情况,使用1.0而不是1来强制进行浮点除法:

>>> 1.0 / math.factorial(m)
0.16666666666666666

相关问题 更多 >