私はdoctestをチェックアウトし、階乗の例をエディターにコピーしました。再帰を使うとより関数型プログラミングに感じられるので、例を次のように変更したいと思いました。
def factorial(n):
# ... omitted
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
if n == 0:
return 1
else:
return factorial(n - 1) * n
この変更の後、テストの 1 つが失敗しました。
Failed example:
factorial(30.0)
Expected:
265252859812191058636308480000000L
Got:
2.6525285981219103e+32
この違いの理由は何ですか?