次のよく知られた式を使用して、自然対数(数学ではeとして知られている)の底を計算するプログラムを作成しました。
e = (1 + 1.0/n) ** n
コードは次のとおりです。
def e_formula(lim):
n = lim
e = (1 + 1.0/n) **n
return e
10 1 から 10 100まで繰り返すテストをセットアップしました。
if __name__ == "__main__":
for i in range(1,100):
print e_formula(10**i)
ただし、次の結果は 10**11 付近で爆発します。
シェルからの実際の結果:
2.5937424601
2.70481382942
2.71692393224
2.71814592682
2.71826823719
2.7182804691
2.71828169413
2.71828179835
2.71828205201
2.71828205323
2.71828205336
2.71852349604
2.71611003409
2.71611003409
3.03503520655
1.0
この理由を探しています。結果が 32 ビット マシンの浮動小数点数の制限を超えているためか、Python 自体が浮動小数点数を計算する方法のためです。より良い解決策を探しているわけではありません。なぜそれが爆発するのかを理解したいだけです。