在不损失C++或 Python 性能的情况下计算 pi

Calculate pi without losing performance in C++ or Python

本文关键字:情况下 计算 pi 性能 Python 损失 C++      更新时间:2023-10-16

我正在寻找一种算法来计算 pi 并继续计算,而不必重新计算所有内容。我正在尝试在 pi 中寻找一个数字。我在 Python 中制作了一个算法来做到这一点,但它随着时间的推移而变慢(显然):

def make_pi(lenght):
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
    for j in range(lenght):
        if 4 * q + r - t < m * t:
            yield m
            q, r, t, k, m, x = 10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x
        else:
            q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2
piArray = []
for i in make_pi(50):
    piArray.append(str(i))
piArray = piArray[:1] + ['.'] + piArray[1:]
piString = "".join(piArray)
lookingFor="9833673362"
found=False
current=10
while found==False:
    print(str(current))
    for i in make_pi(current):
        piArray.append(str(i))
    piArray = piArray[:1] + ['.'] + piArray[1:]
    piString = "".join(piArray)
    if piString[-len(lookingFor):] == lookingFor:
        found=True
        print("Found! Tries: " + str(current - 10))
    current+=1

我需要更快的 Python 算法,甚至可能C++。(更快的我的意思是它不应该减慢)

在这种情况下,我将使用spigot算法,该算法允许在有限的内存量下计算pi的第n位数字,并且不随数字的索引而增加; 特别是Bailey-Borwein-Plouffe变体。

如果我正确理解您的问题,此链接很可能是您正在寻找的:

该公式可以直接计算任何给定π数字的值,而无需计算前面的数字