Python阶乘相关级数计算精度偏差,求无库依赖修正建议
修正余弦函数泰勒展开近似值的精度问题
你的代码出现精度差异的核心原因是嵌套循环的递推逻辑不合理,每次计算第i项时都从1重新开始迭代,导致浮点运算的误差被多次累积。我们可以通过优化泰勒项的递推方式来解决这个问题,同时避免导入任何库。
问题分析
余弦函数的泰勒展开式为:
cos(x) = 1 - x²/2! + x⁴/4! - x⁶/6! + ... + (-1)^i * x^(2i)/(2i)!
你的代码中,计算每一项时的嵌套循环逻辑没有利用前一项的结果,而是重复计算,这不仅效率低,还会引入额外的浮点误差。
修正方案
改用递推式计算每一项:第i项可以由第i-1项直接推导而来,公式为:term_i = term_{i-1} * (-x²) / ((2i-1)*2i)
这样只需要一次循环就能完成所有项的计算,大幅减少浮点运算的次数和误差累积。
修正后的代码
n = int(input("Enter a positive integer n:\n")) x = float(input("Enter a positive real number x :\n")) sum_val = 1 # 避免使用关键字sum作为变量名 current_term = 1 # 初始项对应i=0的情况 for i in range(1, n+1): # 递推计算当前项 current_term *= (-x * x) / ((2*i - 1) * (2*i)) sum_val += current_term print("w =", sum_val)
测试验证
输入n=5、x=3.14时,运行结果为:w = -1.0018168365436917
完全符合预期的测试结果。
额外优化说明
- 避免使用Python内置关键字
sum作为变量名,防止潜在的命名冲突 - 递推式直接复用前一项的计算结果,减少了不必要的浮点运算,从根源上降低了误差累积
内容的提问来源于stack exchange,提问作者bobthebuilder
相关产品推荐
相关产品推荐

