For some reason after a while my code raises,
OverflowError: cannot convert float infinity to integer
.
I can't see any reason why it would do this, there is little use of floats and no use of the 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)
However replacing 1.5
with a 1
or a 2
works. Why?
bugs * 1.5
is a floating-point operation because of the floating-point operand (1.5
), which you convert back to an integer. Note bugs * 2
and bugs * 1
are integer operations, because of the integer operands.
It is always increasing, at an exponential rate (bugs = int(bugs * 1.5)
).
Eventually bugs
will be an integer large enough such that bugs * 1.5
will exceed the maximum allowable value of a floating-point number, and thus will be "infinity". Then you try to convert that back to an integer, hence the error message, which is accurate.
bugs * 2
(integer operation as mentioned) works because there is no concept of "infinity" or an overflow error for integers. bugs * 1
, of course, just runs forever. bugs * 2.0
, however, would fail.