You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何计算自然常数e的Python代码输出与math.e存在精度差异?

为何泰勒级数计算的e比math.e多一位小数?

你的代码如下:

import math 

Sn = 0
x = 1
big_n = 10000

for i in range(0, big_n, 1):
    Sn = Sn + ((x**i)/(math.factorial(i)))

print(Sn)
print(math.e)

运行输出:

2.7182818284590455
2.718281828459045

原因可以从这几点理解:

  • 双精度浮点数的本质:Python使用64位双精度浮点数存储小数,这类浮点数的有效数字约为15-17位,并没有固定的小数位数。math.e和你计算的Sn都是双精度浮点数,但它们的二进制存储值存在极细微的差异。
  • math.e的特性:math.e是Python内置的、经过优化的e的近似值,它的二进制编码对应的十进制字符串输出就是2.718281828459045。
  • 泰勒级数的舍入误差:你通过10000项累加计算e的过程中,每一步的浮点运算都会产生微小的舍入误差,最终导致Sn的二进制存储值和math.e略有不同。当Python把这个浮点数转为字符串时,会输出足够多的位数来唯一标识该浮点数,所以末尾多了一位5。
  • 数值等价性验证:虽然输出字符串看起来不同,但两个值在双精度浮点数的误差范围内是等价的。你可以测试:
    print(math.isclose(Sn, math.e))  # 输出True
    

内容的提问来源于stack exchange,提问作者Ахмет Мырзакулов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:44:52