我需要更多小数位进行 pi 计算 [已关闭]

i need more decimal places for pi calculation [closed]

提问人:Not Gartificial 提问时间:11/4/2021 最后编辑:Not Gartificial 更新时间:11/5/2021 访问量:184

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

2年前关闭。

社群在 2 年前审查了是否重新打开这个问题,并关闭了这个问题:

原始关闭原因未解决

我正在尝试用 python 制作一个 Pi 计算器,但我需要更多的小数位。

如果有人编辑我的代码并仔细解释他们做了什么,那将有很大帮助。

这是我正在使用的代码。

import math
d = 0
ans = 0
display = 0
while True:
    display += 1
    d += 1
    ans += 1/d**2
    if display == 1000000:
        print(math.sqrt(ans*6))
        display = 0
    # displays value calculated every 1m iterations

~85M 迭代后的输出:(3.14159264498239)

我需要超过15位小数(3.14159264498239........)

Python 十进制 浮点精度 pi

评论

1赞 jarmod 11/4/2021
与什么相比更多?您的实际要求是什么?此外,您通常会将 ,而不是 ,用于无限循环。while loop == loopwhile True
0赞 Not Gartificial 11/4/2021
我需要在输出中有更多的小数位,因为我正在计算一个看似无限数量的小数位。
1赞 jarmod 11/4/2021
您不能指望 Stack Overflow 用户下载并运行您的代码(在一般情况下)。您应该清楚地指出您的实际和期望结果是什么。
0赞 JonSG 11/4/2021
看一下包装decimal
1赞 General Grievance 11/4/2021
@JonSG 这只是问题的一部分。即使使用 python 的正常浮点精度,该系列的效率也非常低。在 1200 万次迭代中,该系列仅精确到 6 位数字,python 可以毫无问题地表示。

答:

1赞 LeopardShark 11/4/2021 #1

您使用的是一个非常缓慢收敛的 π²∕6 级数,因此您不会以这种方式获得非常精确的值。浮点限制会阻止 之后的进一步进展,但无论如何,您不会在任何合理的时间内走得更远。您可以通过以下组合来解决这些问题3.14159264498239

  • 对代码进行微观优化,

  • 存储值列表,反转它并使用 ,math.fsum

  • decimal.Decimal

  • 使用更好的系列(比如这个),

  • 使用快速收敛到 π 值的方法,而不是一个系列(如这个),

  • 使用 PyPy 或比 Python 更快的语言,

  • from math import pi.

评论

0赞 Not Gartificial 11/30/2022
我迟到了一年,但谢谢
0赞 rickturner2001 11/4/2021 #2

您可以尝试使用生成器:

def oddnumbers():
    n = 1
    while True:
        yield n
        n += 2


def pi_series():
    odds = oddnumbers()
    approximation = 0
    while True:
        approximation += (4 / next(odds))
        yield approximation
        approximation -= (4 / next(odds))
        yield approximation


approx_pi = pi_series()

for x in range(10000000):
    print(next(approx_pi))

评论

0赞 Not Gartificial 11/30/2022
我知道这就像晚了一年,但谢谢!