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

求助:如何用Python正确实现1/π近似计算公式的求和循环?

修正拉马努金1/π近似公式的Python实现

你当前的代码存在几个关键错误,导致结果异常:

  • 未实现公式要求的求和逻辑:该公式是对k从0到N的所有项累加,你只计算了单个k=N的项,还错误地乘以了N。
  • k的起始值错误:公式中k的取值从0开始,而非1。
  • 幂运算表达式错误:396**4*k应为396**(4*k),你当前的写法是先计算396的4次方再乘以k,与公式不符。

以下是正确的实现代码:

import math

def approximate_reciprocal_pi(N):
    # 初始化求和变量
    total = 0.0
    for k in range(0, N+1):
        # 计算每一项的分子
        numerator = math.factorial(4 * k) * (1103 + 26390 * k)
        # 计算每一项的分母
        denominator = (math.factorial(k) ** 4) * (396 ** (4 * k))
        # 累加当前项
        total += numerator / denominator
        # 打印当前迭代进度
        print(f"正在迭代k={k}/{N}", end="\r", flush=True)
    # 乘以公式的前置系数
    rec_pi = (2 * math.sqrt(2) / 9801) * total
    return rec_pi

# 测试:仅需N=10即可得到极高精度的1/π
N = 10
reciprocal_pi = approximate_reciprocal_pi(N)
print(f"\n1/π的近似值:{reciprocal_pi}")
print(f"真实1/π值:{1/math.pi}")
print(f"误差:{abs(reciprocal_pi - 1/math.pi)}")

补充说明

  • 拉马努金的这个公式收敛极快,仅N=10就能得到超过30位的有效数字,完全不需要取到132这么大的N。
  • 使用math.factorial计算阶乘时,k过大(比如k>100)会触发数值溢出,但公式的快速收敛特性根本不需要这么大的迭代次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:45:43