Benötigen Sie es für einen auch nur aus der Ferne praktischen Zweck oder nur für ...? Ich kann den Punkt nicht sehen, also bin ich nur neugierig.
Turm
2
@ Idigas: Machst du nie Pi?
Nosredna
Bald kann ich den Algorithmus zur Berechnung von pi finden, ich werde etwas aufschreiben, um so viele zu berechnen, wie Sie wollen ...
RCIX
2
Versuchen Sie, eine neue Antwort auf Ihre Frage zu akzeptieren. Die ursprünglich akzeptierte Antwort hatte einen einzelnen Link, der nicht mehr existiert, daher wurde er gelöscht. Markieren Sie die Frage, wenn Sie Fragen an die Moderatoren haben.
Troggy
Antworten:
9
Ich weiß, dass Sie sagen, dass es Ihnen egal ist, aber ich vermute ernsthaft, dass Ihre CPU sie schneller berechnen kann , als Ihre Netzwerkkarte sie herunterladen kann.
Ausgehend von der letzten Ziffer und dem aktuellen Status des Rechners, mit dem sie generiert wurde, kann die nächste Ziffer in konstanter Zeit gefunden werden. Es wird nicht immer schwieriger, die nächste Primzahl zu finden.
"""
Python3 program to calculate Pi using python long integers, binary
splitting and the Chudnovsky algorithm
See: http://www.craig-wood.com/nick/articles/pi-chudnovsky/ for more
info
Nick Craig-Wood <[email protected]>
"""import mathfrom gmpy2 import mpzfrom time import timeimport gmpy2def pi_chudnovsky_bs(digits):"""
Compute int(pi * 10**digits)
This is done using Chudnovsky's series with binary splitting
"""
C =640320
C3_OVER_24 = C**3//24def bs(a, b):"""
Computes the terms for binary splitting the Chudnovsky infinite series
a(a) = +/- (13591409 + 545140134*a)
p(a) = (6*a-5)*(2*a-1)*(6*a-1)
b(a) = 1
q(a) = a*a*a*C3_OVER_24
returns P(a,b), Q(a,b) and T(a,b)
"""if b - a ==1:# Directly compute P(a,a+1), Q(a,a+1) and T(a,a+1)if a ==0:Pab=Qab= mpz(1)else:Pab= mpz((6*a-5)*(2*a-1)*(6*a-1))Qab= mpz(a*a*a*C3_OVER_24)Tab=Pab*(13591409+545140134*a)# a(a) * p(a)if a &1:Tab=-Tabelse:# Recursively compute P(a,b), Q(a,b) and T(a,b)# m is the midpoint of a and b
m =(a + b)//2# Recursively calculate P(a,m), Q(a,m) and T(a,m)Pam,Qam,Tam= bs(a, m)# Recursively calculate P(m,b), Q(m,b) and T(m,b)Pmb,Qmb,Tmb= bs(m, b)# Now combinePab=Pam*PmbQab=Qam*QmbTab=Qmb*Tam+Pam*TmbreturnPab,Qab,Tab# how many terms to compute
DIGITS_PER_TERM = math.log10(C3_OVER_24/6/2/6)
N = int(digits/DIGITS_PER_TERM +1)# Calclate P(0,N) and Q(0,N)
P, Q, T = bs(0, N)
one_squared = mpz(10)**(2*digits)#sqrtC = (10005*one_squared).sqrt()
sqrtC = gmpy2.isqrt(10005*one_squared)return(Q*426880*sqrtC)// T# The last 5 digits or pi for various numbers of digits
check_digits ={100:70679,1000:1989,10000:75678,100000:24646,1000000:58151,10000000:55897,}if __name__ =="__main__":
digits =100
pi = pi_chudnovsky_bs(digits)print(pi)#raise SystemExitfor log10_digits in range(1,9):
digits =10**log10_digits
start =time()
pi = pi_chudnovsky_bs(digits)print("chudnovsky_gmpy_mpz_bs: digits",digits,"time",time()-start)if digits in check_digits:
last_five_digits = pi %100000if check_digits[digits]== last_five_digits:print("Last 5 digits %05d OK"% last_five_digits)
open("%s_pi.txt"% log10_digits,"w").write(str(pi))else:print("Last 5 digits %05d wrong should be %05d"%(last_five_digits, check_digits[digits]))
Antworten:
Ich weiß, dass Sie sagen, dass es Ihnen egal ist, aber ich vermute ernsthaft, dass Ihre CPU sie schneller berechnen kann , als Ihre Netzwerkkarte sie herunterladen kann.
Ausgehend von der letzten Ziffer und dem aktuellen Status des Rechners, mit dem sie generiert wurde, kann die nächste Ziffer in konstanter Zeit gefunden werden. Es wird nicht immer schwieriger, die nächste Primzahl zu finden.
quelle
Neben Joels Kommentar ist SuperPi eines der beliebtesten Tools dafür. Es wird auch für Stresstests verwendet.
quelle
Unter Ubuntu können Sie
sudo apt-get install pi
und dann:
$ pi 100 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
Es berechnet die willkürliche Genauigkeit anhand der Anzahl der zu berechnenden Stellen.
quelle
Wenn Sie Python zur Berechnung verwenden möchten, finden Sie hier eine extrem schnelle Methode (mit Python und der gmpy2-Bibliothek):
http://www.craig-wood.com/nick/articles/pi-chudnovsky/
Hier ist der Code mit einer kleinen Korrektur:
quelle