Tim*_*man 3 python floating-point
我编写了一个程序,使用以下众所周知的公式计算自然对数的基数(在数学中称为e):
e =(1 + 1.0/n)**n
代码是:
def e_formula(lim):
n = lim
e = (1 + 1.0/n) **n
return e
Run Code Online (Sandbox Code Playgroud)
我设置了一个从10 1到10 100 迭代的测试:
if __name__ == "__main__":
for i in range(1,100):
print e_formula(10**i)
Run Code Online (Sandbox Code Playgroud)
然而以下结果在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本身计算浮点数的方式.我不是在寻找更好的解决方案; 我只是想明白为什么会爆炸.
这仅仅是由于浮点数的精度有限.你得到15位有效数字.
你正在服用(1 + very_small_number)
.大多数数字very_small_number
在此阶段被截断.
在**n
刚刚乘以这个错误
归档时间: |
|
查看次数: |
104 次 |
最近记录: |