Wo kann ich viele Ziffern von Pi herunterladen?

4495
bgw

Wo finde ich eine große Anzahl von Pi-Ziffern? Ich habe bereits 3,14 Milliarden mit PiFast berechnet (funktioniert gut unter Wein).

Ich interessiere mich nicht für langsame Downloadgeschwindigkeiten.

11
Benötigen Sie es für einige aus der Ferne praktische Zwecke oder einfach nur für ...? Ich kann den Punkt nicht sehen, also bin ich nur neugierig. Rook vor 14 Jahren 2
@Idigas: Machst du nie Pi? Nosredna vor 14 Jahren 2
Soon kann ich den Algorithmus für die Berechnung von Pi finden. Ich schreibe etwas auf, um so viele zu berechnen, wie Sie möchten ... RCIX vor 14 Jahren 0
Versuchen Sie, eine neue Antwort auf Ihre Frage zu akzeptieren. Die ursprünglich akzeptierte Antwort hatte einen einzelnen Link, der nicht mehr existiert, und wurde daher gelöscht. Fahren Sie fort und markieren Sie die Frage, wenn Sie Fragen an die Moderatoren haben. Troggy vor 13 Jahren 2

4 Antworten auf die Frage

9
Joel Coehoorn

Ich weiß, Sie sagen, es ist Ihnen egal, aber ich habe den Verdacht, dass Ihre CPU sie schneller berechnen kann , als Ihre Netzwerkkarte sie herunterladen kann.

Die letzte Ziffer und der aktuelle Stand des zur Erstellung verwendeten Rechners geben die nächste Ziffer in konstanter Zeit an. Es wird nicht schrittweise schwieriger, als wenn man die nächste Primzahl sucht.

Ja, aber es ist eine Menge CPU-Zeit, die ich widmen möchte, und ich würde lieber etwas Bandbreite als die CPU-Zeit verwenden. bgw vor 14 Jahren 0
@Joel: Kannst du übrigens dafür einen Algorithmus zeigen? (Ja, ich weiß, das ist eher SO-Gehalt, aber da sind wir hier ...) R. Martinho Fernandes vor 14 Jahren 0
http://numbers.computation.free.fr/Constants/PiProgram/pifast.html bgw vor 14 Jahren 0
Die Mathematik ist mir unerklärlich, aber in Wikipedia wird viel nach unten gelesen, und eine der Serien soll "14 Ziffern pro Begriff liefern". Joel Coehoorn vor 14 Jahren 0
Sorry, falscher Link: http://numbers.computation.free.fr/Constants/PiProgram/algo.html. Es war in Frames bgw vor 14 Jahren 0
@Joel Das wäre die Chudnovsky-Formel bgw vor 14 Jahren 0
5 Minuten, um 100m Dezimalstellen auf meinem relativ neuen Laptop zu berechnen (unter Verwendung des `pi`-Pakets auf nicht-virtuellem Ubuntu), 10 Sekunden, um dasselbe als 57MB-Datei herunterzuladen. Fazit: Die Berechnung ist 30 Mal langsamer als das Herunterladen. Nicolas Raoul vor 9 Jahren 0
Das stimmt einfach nicht. Ron Reiter vor 9 Jahren 0
4
John T

SuperPi ist eines der beliebtesten Tools für Joels Kommentar . Es wird auch für Stresstests verwendet.

PiFast ist schneller. bgw vor 14 Jahren 0
3
Janus Troelsen

On Ubuntu, you can sudo apt-get install pi

and then:

$ pi 100 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

It calculates arbitrary precision given the number of digits to calculate.

0
Ron Reiter

Wenn Sie Python zur Berechnung verwenden möchten, finden Sie hier eine extrem schnelle Methode (mit Python und der Bibliothek gmpy2):

http://www.craig-wood.com/nick/articles/pi-chudnovsky/

Hier ist der Code mit einer kleinen Korrektur:

""" 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 <nick@craig-wood.com> """  import math from gmpy2 import mpz from time import time import gmpy2  def 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 // 24 def 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 = -Tab else: # 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 combine Pab = Pam * Pmb Qab = Qam * Qmb Tab = Qmb * Tam + Pam * Tmb return Pab, 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 SystemExit for 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 % 100000 if 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]))