Python e 函数 with limit [duplicate]

Python e function with limit [duplicate]

提问人:Thiago Martins 提问时间:11/12/2023 最后编辑:mkrieger1Thiago Martins 更新时间:11/12/2023 访问量:80

问:

给定以下代码示例:

import math
e = lambda x: (1+(1/x))**x
for x in range(1, 20):
    print(math.e > e(10**x))

True
True
True
True
True
True
True
True
False
False
False
False
True
True
False
True
True
True
True 

为什么会发生这种真假之间的摇摆?这不应该永远是真的吗?

import math
e = lambda x: (1+(1/x))**x
for x in range(1, 20):
    print(math.e > e(10**x))

True
...
True
数学

评论

0赞 Mark Ransom 11/12/2023
@slothrop文本中有一些额外的字符被 Markdown 处理吃掉了。
1赞 Tim Roberts 11/12/2023
舍入误差。就这么简单。 不能完全用二进制表示,所以你得到一个近似值。有时近似值有点高,有时只是有点低。1/10
1赞 slothrop 11/12/2023
考虑 x(在 for 循环中)为 19 的情况。然后函数尝试计算 (1+10^-19),并将其提高到 10^19 的幂。显然,(1+10^-19) 需要相当于 20 个十进制数字的精度来表示,但这是浮点数可以达到的更高精度。e
0赞 slothrop 11/12/2023
@Goku OP 正在计算而不是 .换句话说,参数的范围是 10 到 10^19,而不是 1 到 19。e(10**x)e(x)
0赞 slothrop 11/12/2023
@Goku 在精确的数学中,对于大 x,会收敛到。但是在浮点数学中,我们得到了大 x 的精度问题。e(x)math.e

答:

0赞 Jiji Thanka Ligoshia D.V 11/12/2023 #1

最初,对于 x 的小值,近似值 (1 + 1/x)^x 足够接近 math.e,因此比较返回 True。 随着 x 的增加,精度限制开始影响近似的精度,导致比较返回 False。 True 和 False 之间的振荡发生在精度限制继续影响结果时。

0赞 Martin Kalling 11/12/2023 #2

发生的情况是,您将一个大数字 1 添加到一个小数字 1/10**20 中。计算机上的数学是用固定进动完成的,考虑用 1.000 + 0.00001 和 4 位精度进行计算。它将四舍五入到 1,你的诽谤将破裂。

 import math
 e = lambda x: (1+(1/x))**x
 for x in range(1, 20):
...     print( e(10**x))
... 
2.5937424601000023
2.7048138294215285
2.7169239322355936
2.7181459268249255
2.7182682371922975
2.7182804690957534
2.7182816941320818
2.7182817983473577
2.7182820520115603
2.7182820532347876
2.71828205335711
2.7185234960372378
2.716110034086901
2.716110034087023
3.035035206549262
1.0
1.0
1.0
1.0