Skip to main content
 首页 » 编程设计

python之Pi 使用 Python

2025年05月04日11linjiqin

我是 Python 初学者。我尝试用 Python 语言评估 pi。我在这里使用 Archimedes method .

我的代码是:

import math 
from decimal import * 
getcontext().prec = 50 
 
pi = 0 
PolySides = 6 
SideLen = 1 
Perim = 6 
Dia = 2 
 
while PolySides < 10000000000: 
    SideLen2 = Decimal(SideLen) / Decimal(2) 
    radius_a = Decimal(math.sqrt(1 - SideLen2**2)) 
    radius_b = Decimal(1) - Decimal(radius_a) 
    SideLenNew = Decimal(math.sqrt(SideLen2**2 + radius_b**2)) 
    PolyCircum = Decimal(PolySides * SideLen) 
    pi = PolyCircum / Dia 
    print('Polygon Sides:', PolySides, 'Pi = ', pi) 
    SideLen = SideLenNew 
    PolySides = 2 * PolySides 

但出于某种原因,此代码将 pi 打印到小数点后 14 位。我不明白我在哪里失去了精度。谢谢。

请您参考如下方法:

您在 float 和 decimal 之间穿梭。 math.sqrt 接受一个float 并返回一个float,因此会进行转换,将精度截断为float的。

这些改变就足够了:

while PolySides < 10000000000000000000: 
    SideLen2 = Decimal(SideLen) / 2 
    radius_a = (1 - SideLen2**2).sqrt() 
    radius_b = 1 - radius_a 
    SideLenNew = (SideLen2**2 + radius_b**2).sqrt() 
    PolyCircum = Decimal(PolySides * SideLen) 
    pi = PolyCircum / Dia 
    print('Polygon Sides:', PolySides, 'Pi = ', pi) 
    SideLen = SideLenNew 
    PolySides = 2 * PolySides