提问人:Thiago Martins 提问时间:11/12/2023 最后编辑:mkrieger1Thiago Martins 更新时间:11/12/2023 访问量:80
Python e 函数 with limit [duplicate]
Python e function with limit [duplicate]
问:
给定以下代码示例:
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赞
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
评论
1/10
e
e(10**x)
e(x)
e(x)
math.e