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

如何提升Python小数精度以准确计算π的分数近似误差

问题:π分数近似值的精度瓶颈问题

运行以下代码尝试寻找π的分数近似值:

pi=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
U = 314
D = 100
print(U/D,U,D)

best=3.0
while True:
    if abs((U+1)/D-pi)<abs(U/D-pi):
        if abs((U+1)/D-pi)<abs(best-pi):
            best=(U+1)/D
            print(U+1,D,abs((U+1)/D-pi))
        U+=1

        
    elif abs((U-1)/D-pi)<abs(U/D-pi):
        if abs((U-1)/D-pi)<abs(best-pi):
            best=(U-1)/D
            print(U,D,abs((U-1)/D-pi))
        U-=1

    else:
        D+=1

但程序最终会显示π与近似值的误差为0(π是无理数,不可能存在这样的分数)。尝试将所有值乘以1e17后,问题依然存在,请问如何修改代码使小数精度超过1e-17?

解决方案

问题根源

Python默认的浮点数是双精度(64位),仅能提供约15-17位有效数字。当计算的误差小于这个精度范围时,浮点数无法区分微小的差值,会直接显示为0。你尝试乘以1e17的方法依然依赖浮点数运算,所以无法突破这个精度限制。

修改方法:使用decimal模块实现高精度运算

Python的decimal模块支持任意精度的十进制运算,可以通过设置精度参数来获得远超双精度的计算能力。

修改后的代码示例:

from decimal import Decimal, getcontext

# 设置精度,这里设为50位,可根据需求调整
getcontext().prec = 50

# 用Decimal类型定义π的高精度值
pi = Decimal("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679")
U = Decimal(314)
D = Decimal(100)
print(U/D, U, D)

best = Decimal(3.0)
while True:
    current = U / D
    next_u_plus = (U + 1) / D
    next_u_minus = (U - 1) / D
    
    error_current = abs(current - pi)
    error_plus = abs(next_u_plus - pi)
    error_minus = abs(next_u_minus - pi)
    
    if error_plus < error_current:
        if error_plus < abs(best - pi):
            best = next_u_plus
            print(U+1, D, error_plus)
        U += 1
    elif error_minus < error_current:
        if error_minus < abs(best - pi):
            best = next_u_minus
            print(U, D, error_minus)
        U -= 1
    else:
        D += 1

关键说明

  1. 精度设置:getcontext().prec = 50指定了运算的有效数字位数,你可以根据需要增大这个值(比如设为100位)来获得更高的精度。
  2. 类型统一:所有参与运算的变量(U、D、best、pi)都需要转换为Decimal类型,避免混合浮点数运算导致精度丢失。
  3. 误差计算:用Decimal类型计算误差,能精准捕捉到极小的差值,不会出现误判为0的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:33:11