Python队列整数除法错误

时间:2017-04-27 02:51:10

标签: 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控制有多少台服务器。 我更改了循环中的变量,以查看变量是否被先前的值覆盖在内存中,而不是因为任何原因而重置。我确定这与它无关。

1 个答案:

答案 0 :(得分: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