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

Python中指数函数泰勒近似计算结果异常原因排查

为什么两种泰勒级数计算e^(-x)的结果差异这么大?

这是个非常经典的数值计算问题,核心原因在于交替级数的舍入误差累积和大数相消的数值缺陷,咱们具体分析:

1. 泰勒级数taylor1的问题:交替项的大数相消

taylor1直接展开e^(-x)的泰勒级数:

sum += (-x)**i / math.factorial(i)

当x较大时(比如x≥5),级数的前几项绝对值会先快速增大,再逐渐减小(因为阶乘的增长速度最终会超过x^i)。例如x=5时:

  • i=5时,项为(-5)^5/5! = -3125/120 ≈ -26.04
  • i=10时,项为(-5)^10/10! = 9765625/3628800 ≈ 2.69

这些大的正负项相加时,会出现大数相消:两个绝对值很大的数(一正一负)相加得到一个很小的结果,但浮点数的精度是有限的,在相加过程中,小量级的项会被大量级的项“覆盖”,舍入误差不断累积,最终导致结果完全偏离真实值(甚至出现负数,而e^(-x)永远是正数)。

2. 泰勒级数taylor2的优势:正项求和的稳定性

taylor2先计算ex的泰勒级数(所有项都是正数),再取倒数得到e(-x):

sum += x**i / math.factorial(i)
return 1/sum

ex的泰勒级数全为正项,相加过程中不会出现大数相消的问题,每一项的贡献都能被准确累加,得到的ex近似值精度更高。再通过取倒数得到e^(-x),这个过程的误差传递远小于taylor1的累积误差,因此结果更接近真实值。

3. 为什么x≤4时结果差异不大?

当x较小时,taylor1的各项绝对值都不会特别大,大数相消的问题不明显,舍入误差累积也有限,因此两个函数的计算结果大致一致。但随着x增大,taylor1的数值缺陷会被迅速放大,结果偏差越来越严重。

结合你给出的测试结果就能直观看到:taylor1在x=5时已经得到负数(完全错误),而taylor2的结果接近e^(-5)的真实值(≈0.0067379);x越大,这种差异越显著。

内容的提问来源于stack exchange,提问作者Ach113

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:05:47