Ich bin auf der Suche nach einem Algorithmus, um Pi zu berechnen und weiter zu berechnen, ohne alles neu berechnen zu müssen. Ich versuche nach einer Nummer in Pi zu suchen. Ich habe einen Algorithmus in Python, das genau das tut, aber es verlangsamt die Zeit nach unten (natürlich):Berechne Pi ohne Leistungsverlust in C++ oder 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
Ich brauche einen schnelleren Algorithmus in Python oder möglicherweise sogar C++. (Mit schneller ich meine es sollte nicht verlangsamen)
Dieser Code ist ein bisschen hässlich und schwer zu lesen. Und Sie geben nicht genügend Informationen (z. B. welche Art von Leistungsabfall Sie beobachten. Dies ist wichtig, um festzustellen, ob diese Verschlechterung auf Ihren Code oder auf die Komplexität des Algorithmus zurückzuführen ist) Nun ... Die [BBP-Formel ] (https://en.wikipedia.org/wiki/Bailey%E2%80%93Borwein%E2%80%93Ploufle_formula) sieht aus wie es ist einfach zu implementieren und es wächst mit O (n * log n). Dies sollte asymptotisch das Beste sein, was Sie tun können. – sascha
Entschuldigung für diesen hässlichen Code, ich teste gerade um + Ich habe keine Erfahrung mit der Berechnung von PI, also kann ich dir nicht genau sagen, was ich brauche. Danke für Ihre Antwort! – fabian0010
Hier ist [Gauss-Legendre-Algorithmus zur Berechnung der Ziffern von π in Python] (http://stackoverflow.com/a/347749/4279). 'dezimal' Modul kann mit C seit Python 3.3 beschleunigt werden. – jfs