我编写了一个程序,使用以下众所周知的公式计算自然对数的底(在数学中称为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 本身计算浮点数的方式。我不是在寻找更好的解决方案;我只是想了解它为什么会爆炸。