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

关于Python实现e的麦克劳林级数计算代码的技术疑问

麦克劳林级数计算e的Python代码疑问解答

计算e的Python代码

from math import log10, exp

places = int(input('Enter the number of decimal places: '))
one = 10**places
extra = 10**4 

n = 1
term = one * extra 
eee = 0
count = 0

while term > 0:
    eee += term
    count += 1
    term = term // n 
    n += 1

eee = eee // extra

intPart = eee // one

fracPart = eee % one

eee = str(intPart)+'.'+ '0'*(places - (int(log10(fracPart)) + 1))+str(fracPart)

print("""
Python's value of e is:\n%.15f\n
e to %d decimal places is:\n%s\n
The number of terms in the series is %d""" \
% (exp(1), places, eee, count))

技术疑问

  1. 使用extra变量的原因是什么?
  2. 麦克劳林级数的首项为1,但为何初始term被赋值为one * extra?
  3. 循环条件设置为term > 0的原因是什么?
  4. 语句term = term // n的逻辑依据是什么?

疑问解答

  1. 关于extra变量:
    这是用来做精度补偿的。代码全程用整数运算(//取整),会丢失小数部分,提前乘上10^4这个放大因子,能让计算过程中保留更多有效数字,最后再除掉这个因子,避免多次取整导致最终结果精度不足。简单说就是用额外的位数抵消取整误差,保证目标小数位的准确性。

  2. 初始term的赋值:
    e的麦克劳林级数是e = 1 + 1/1! + 1/2! + 1/3! + ...,首项是1。这里的one是10^places,对应“1加上places位小数”的单位(比如要算5位小数,one就是100000,代表1.00000)。乘上extra后,相当于把首项1放大成整数,全程用整数运算避免浮点精度损失,后续所有级数项也基于这个放大值计算。

  3. 循环条件term > 0:
    term是放大后的级数项,当它变成0时,说明这个项的实际数值已经小到不会影响最终结果的精度了(放大10^4倍后还是0,实际值小于1/10000,对我们要的places位小数来说可以忽略)。所以循环到term为0就停止,没必要再计算更小的项。

  4. term = term // n的逻辑:
    级数的项是递推的:第一项是1,第二项是1/1! = 第一项/1,第三项是1/2! = 第二项/2,第四项是1/3! = 第三项/3,以此类推。每个后项都是前项除以当前的n(n从1开始递增)。因为我们用整数放大值计算,所以用整数除法//代替浮点除法,全程保持整数运算,避免精度丢失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:10:43