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 附近爆炸。

shell的实际结果:

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 回答