0

一段时间后由于某种原因,我的代码引发了 OverflowError: cannot convert float infinity to integer. 我看不出它为什么会这样做,很少使用浮点数,也没有使用 inf,

def bugsInCode(begin):
    bugs = begin
    while bugs != 0:
        print "%s bugs in the code, %s bugs\ntake one down patch it around, %s bugs in the code!" % (bugs, bugs, int(bugs * 1.5))
        bugs = int(bugs * 1.5)

但是替换1.5为 a1或 a2作品。为什么?

4

1 回答 1

3

bugs * 1.5是浮点运算,因为浮点操作数 ( 1.5) 可以转换回整数。注意bugs * 2bugs * 1是整数运算,因为整数操作数。

它总是以指数速率(bugs = int(bugs * 1.5))增加。

最终bugs将是一个足够大的整数,以至于bugs * 1.5超过浮点数的最大允许值,因此将是“无穷大”。然后您尝试将其转换回整数,因此错误消息是准确的。

bugs * 2(如上所述的整数运算)之所以有效,是因为没有“无穷大”的概念或整数的溢出错误。bugs * 1,当然,只是永远运行。bugs * 2.0,但是,会失败。

于 2014-11-23T21:50:49.923 回答