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有多少个服务器。我更改了循环中的变量,以查看该变量是否被以前的值覆盖在内存中,而不是出于任何原因而不是重置。我敢肯定,这与它无关。

如果您使用的是python 2,则可能是由于这一部分:

... 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

最新更新