计算E在Python的极限10**12处变得混乱?

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本身计算浮点数的方式.我不是在寻找更好的解决方案; 我只是想明白为什么会爆炸.

Joh*_*ooy 5

这仅仅是由于浮点数的精度有限.你得到15位有效数字.

你正在服用(1 + very_small_number).大多数数字very_small_number在此阶段被截断.

**n刚刚乘以这个错误

  • @pythonMan,2**52有16位小数,所以你只能保证15 (2认同)