3

次のよく知られた式を使用して、自然対数(数学では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 自体が浮動小数点数を計算する方法のためです。より良い解決策を探しているわけではありません。なぜそれが爆発するのかを理解したいだけです。

4

1 に答える 1

5

これは、浮動小数点数の精度が限られているためです。約 15 桁の有効数字が得られます。

を服用してい(1 + very_small_number)ます。の桁のほとんどは、very_small_numberこの段階で切り捨てられます。

はこの**nエラーを乗算するだけです

于 2013-05-24T11:48:26.113 に答える