inf不能转换为浮动

时间:2014-11-23 21:47:56

标签: python-2.7 floating-point overflowexception

经过一段时间我的代码提出了一些原因, 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.51替换2有效。为什么呢?

1 个答案:

答案 0 :(得分: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会失败。