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.51.5浮動小数点オペランド ( ) が整数に変換されるため、 は浮動小数点演算です。bugs * 2整数オペランドのため、およびbugs * 1は整数演算であることに注意してください。

常に指数関数的に増加しています ( bugs = int(bugs * 1.5))。

最終的には、浮動小数点数の最大許容値を超えるbugs十分な大きさの整数になり、したがって「無限大」になります。bugs * 1.5次に、それを整数に変換しようとするため、正確なエラーメッセージが表示されます。

bugs * 2(前述の整数演算)は、「無限大」の概念や整数のオーバーフロー エラーがないため機能します。bugs * 1もちろん、永久に実行されます。bugs * 2.0ただし、失敗します。

于 2014-11-23T21:50:49.923 に答える