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

使用Python编写Pi计算器如何获取更多位小数精度

圆周率计算代码优化方案

原代码问题

  • 采用的巴塞尔级数收敛速度为线性级,要达到1e-15精度需要1e15次迭代,8500万次迭代仅能得到前8位左右的正确小数,无法满足15位以上的精度需求
  • 原生Python float 为64位双精度浮点数,仅能提供约15~17位有效数字,累加过程还会产生精度损失,天然无法支撑更高精度的计算
  • 无自动终止条件,死循环运行无法自动得到目标精度结果

修改后可直接运行的代码

from decimal import Decimal, getcontext

# 此处设置你需要的小数位数,可自行调整
target_decimal_digits = 20
# 运算精度设置为目标位数+10,预留足够余量避免运算过程中的精度损失
getcontext().prec = target_decimal_digits + 10

def calculate_pi():
    # 采用楚德诺夫斯基算法,单次迭代可获得约14位十进制精度
    constant = Decimal(426880) * Decimal(10005).sqrt()
    L = Decimal(13591409)
    X = Decimal(1)
    M = Decimal(1)
    K = Decimal(6)
    sum_total = L
    n = 1
    # 迭代次数仅需目标位数/14+1即可,20位精度仅需迭代2次
    for _ in range(target_decimal_digits // 14 + 1):
        M = (K**3 - 16 * K) * M / n**3
        L += 545140134
        X *= -262537412640768000
        sum_total += M * L / X
        K += 12
        n += 1
    pi = constant / sum_total
    # 格式化输出保留目标小数位数
    return pi.quantize(Decimal("1." + "0" * target_decimal_digits))

if __name__ == "__main__":
    print(calculate_pi())

运行上述代码即可直接得到20位精度的圆周率结果:3.14159265358979323846,调整target_decimal_digits参数即可获得任意位数的计算结果。

修改逻辑说明

  1. 级数替换:将收敛速度极慢的巴塞尔级数替换为楚德诺夫斯基算法,该算法误差为指数级下降,每迭代1次可获得约14位十进制精度,仅需2次迭代即可满足15位以上的精度需求,计算效率相比原方案提升超过10^14倍。
  2. 高精度运算支持:引入Python标准库decimal模块实现任意精度运算,突破原生双精度浮点数的精度限制,通过自定义运算精度保证计算过程中不会出现精度损失。
  3. 逻辑优化:新增目标位数参数,可灵活调整输出精度,新增自动终止逻辑,达到目标精度后自动停止运算并输出结果,不需要手动终止死循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:07