735468682 发表于 2025-10-30 16:28:50

圆周率问题

pi = 0
n = 1000
for k in range(n):
    pi += 1/pow(16,k) * (4 / (8*k +1) - 2 / (8*k + 4) - 1 / (8*k + 5) - 1/(8*k + 6))
print("圆周率值是:{:.60f}".format(pi))我用这个计算圆周率为啥python只能计算到小数点后48位?

FishC 发表于 2025-10-30 16:29:31

您好!您遇到的问题是因为 Python 中的浮点数精度有限。浮点数使用 IEEE 754 双精度格式,只能精确表示大约 15 到 17 位十进制数字。当您尝试打印更多位(如 60 位)时,超出精度的部分会显示为不准确的“垃圾”值。

在您的代码中,pi 是一个浮点数,所以即使公式(如 BBP 公式)理论上可以计算更多位,但浮点运算会限制实际精度。

如果您需要更高精度的圆周率计算,建议使用 Python 的 decimal 模块或其他高精度库。例如:


from decimal import Decimal, getcontext

# 设置精度(例如 100 位)
getcontext().prec = 100

pi = Decimal(0)
n = 1000
for k in range(n):
    term = Decimal(1) / Decimal(16)**k * (
      Decimal(4) / (Decimal(8)*k + 1) -
      Decimal(2) / (Decimal(8)*k + 4) -
      Decimal(1) / (Decimal(8)*k + 5) -
      Decimal(1) / (Decimal(8)*k + 6)
    )
    pi += term

print("圆周率值是:{:.60f}".format(pi))


这样,您就可以获得更精确的结果。但请注意,即使使用高精度库,计算速度和资源消耗也会增加。

希望这能帮到您!如果还有其他问题,请随时问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 圆周率问题