Wie bestimme ich, ob meine Berechnung von pi korrekt ist?


772

Ich habe verschiedene Methoden ausprobiert, um ein Programm zu implementieren, das die Ziffern von pi nacheinander angibt. Ich habe die Taylor-Serienmethode ausprobiert , aber sie hat sich als extrem langsam konvergierend erwiesen (als ich mein Ergebnis nach einiger Zeit mit den Online-Werten verglich). Wie auch immer, ich versuche bessere Algorithmen.

Während ich das Programm schrieb, blieb ich wie bei allen Algorithmen bei einem Problem nhängen : Woher weiß ich, dass die von mir berechneten Ziffern korrekt sind?


20
eher ein mathematisches Problem. Gute Algorithmen geben auch eine Schätzung des Fehlers.
Beispiel

35
Vergleiche mit pi?
Dave Newton

55
@chris: "Buchstäblich überall"?
Leichtigkeitsrennen im Orbit

32
Ich kann bis zu 3.141592653589793238462643383279502 nach Ihnen suchen. Warum brauchen Sie darüber hinaus so viele Ziffern? (Das ist so etwas wie Genauigkeit auf atomarer Ebene mit einem Kreis von der Größe des Universums.)
AJ Henderson

65
Warum dividierst du nicht einfach durch pi und prüfst, ob das Ergebnis 1 ist? (nur ein Scherz)
user541686

Antworten:


1629

Da ich der aktuelle Weltrekordhalter für die meisten pi-Ziffern bin, füge ich meine zwei Cent hinzu :

Sofern Sie nicht tatsächlich einen neuen Weltrekord aufstellen, besteht die übliche Praxis darin, die berechneten Ziffern anhand der bekannten Werte zu überprüfen. Das ist also einfach genug.

Tatsächlich habe ich eine Webseite, auf der Ziffernausschnitte aufgelistet sind, um Berechnungen anhand dieser zu überprüfen: http://www.numberworld.org/digits/Pi/


Aber wenn Sie Weltrekord betreten, gibt es nichts zu vergleichen.

In der Vergangenheit besteht der Standardansatz zur Überprüfung der Richtigkeit der berechneten Ziffern darin, die Ziffern mithilfe eines zweiten Algorithmus neu zu berechnen. Wenn also eine der Berechnungen schlecht läuft, stimmen die Ziffern am Ende nicht überein.

Dies ist in der Regel mehr als doppelt so lang wie die benötigte Zeit (da der zweite Algorithmus normalerweise langsamer ist). Dies ist jedoch die einzige Möglichkeit, die berechneten Ziffern zu überprüfen, wenn Sie das Neuland nie zuvor berechneter Ziffern und einen neuen Weltrekord betreten haben.


In den Tagen, als Supercomputer die Rekorde aufstellten, wurden üblicherweise zwei verschiedene AGM-Algorithmen verwendet:

Dies sind beide O(N log(N)^2)Algorithmen, die ziemlich einfach zu implementieren waren.

Heutzutage sieht es jedoch etwas anders aus. In den letzten drei Weltrekorden haben wir anstelle von zwei Berechnungen nur eine Berechnung mit der schnellsten bekannten Formel ( Chudnovsky-Formel ) durchgeführt:

Geben Sie hier die Bildbeschreibung ein

Dieser Algorithmus ist viel schwieriger zu implementieren, aber viel schneller als die AGM-Algorithmen.

Dann überprüfen wir die Binärziffern mit den BBP-Formeln für die Ziffernextraktion .

Geben Sie hier die Bildbeschreibung ein

Mit dieser Formel können Sie beliebige Binärziffern berechnen, ohne alle Ziffern davor zu berechnen . Es wird also verwendet, um die letzten berechneten Binärziffern zu überprüfen. Daher ist es viel schneller als eine vollständige Berechnung.

Der Vorteil davon ist:

  1. Es wird nur eine teure Berechnung benötigt.

Der Nachteil ist:

  1. Eine Implementierung der Bailey-Borwein-Plouffe (BBP) -Formel ist erforderlich.
  2. Ein zusätzlicher Schritt ist erforderlich, um die Radix-Konvertierung von binär nach dezimal zu überprüfen.

Ich habe einige Details darüber beschönigt, warum das Überprüfen der letzten Ziffern impliziert, dass alle Ziffern korrekt sind. Dies ist jedoch leicht zu erkennen, da sich jeder Rechenfehler auf die letzten Ziffern ausbreitet.


Dieser letzte Schritt (Überprüfen der Konvertierung) ist eigentlich ziemlich wichtig. Einer der früheren Weltrekordhalter hat uns tatsächlich darauf hingewiesen, weil ich anfangs nicht ausreichend beschrieben habe, wie es funktioniert.

Also habe ich diesen Ausschnitt aus meinem Blog gezogen:

N = # of decimal digits desired
p = 64-bit prime number

Geben Sie hier die Bildbeschreibung ein

Berechnen Sie A mit der Basis-10-Arithmetik und B mit der Binärarithmetik.

Geben Sie hier die Bildbeschreibung ein

Wenn A = Bdann mit "extrem hoher Wahrscheinlichkeit", ist die Konvertierung korrekt.


Weitere Informationen finden Sie in meinem Blogbeitrag Pi - 5 Billionen Ziffern .


15
Und um die andere Frage zu beantworten, wie man weiß, wann ein bestimmter Algorithmus auf N Ziffern konvergiert hat: Dies setzt voraus, dass Sie das Konvergenzverhalten des Algorithmus kennen. Die Taylor-Reihe von ArcTan(1)konvergiert logarithmisch. Sie benötigen also eine exponentiell große Anzahl von Begriffen, um zu konvergieren - kurz gesagt, verwenden Sie sie nicht.
Mysticial

21
Ja, Chudnovskys Formel konvergiert konstant bei 14,18 Stellen pro Term. Sie können also die Gesamtzahl der Ziffern dadurch dividieren, um die Anzahl der benötigten Begriffe zu erhalten. ( Die genaue Wert ist: Log(151931373056000)/Log(10) = 14.181647462725477655...)
Mysticial

7
@ erikb85 Kinda. Die BBP-Formel zählt (bis zu einem gewissen Grad) als zweiter Algorithmus. Aber allein reicht es nicht aus, da die Konvertierung auf Basis 10 nicht überprüft wird. Die Idee, die BBP + -Konvertierungsprüfung zu verwenden, um die Notwendigkeit einer zweiten Berechnung zu eliminieren, war nicht meine. Es wurde erstmals von Fabrice Bellard in seinem Weltrekord 2009 gemacht. Es war eine so gute Idee, dass wir dasselbe getan und verbessert haben.
Mysticial

83
@FunsukWangadu Ich kann nur für mich selbst sprechen, aber hier ist es: Ich habe mich nie wirklich um Pi selbst gekümmert. Für mich ist es nur eine andere Nummer. Der Wert liegt nicht in der Zahl selbst oder den 10 Terabyte nutzloser Ziffern, sondern in den Methoden , mit denen er erreicht wird. Die Jahrhunderte der Mathematik und die Jahrzehnte der Computer- / Programmierforschung, die zu diesem Kunststück beigetragen haben, sind auf viele andere Bereiche anwendbar und daher VIEL wertvoller als eine Festplatte mit Ziffern. Einfach ausgedrückt: Das Berechnen der Ziffern von Pi ist eher ein Sport.
Mysticial

8
@Mystical, bin gerade von einer anderen Stackoverflow-Frage auf deine Pi-Berechnungsseite gestoßen und konnte nicht anders, als zu gaffen und zu kichern, was ihr getan habt. Liebte die Festplattenausfälle / Erdbeben in den Protokollen :) einfach unglaublich!
Joe

48

Zweifellos ist es für Ihre Zwecke (von denen ich annehme, dass es sich nur um eine Programmierübung handelt) am besten, Ihre Ergebnisse anhand einer Auflistung der Ziffern von pi im Web zu überprüfen.

Und woher wissen wir, dass diese Werte korrekt sind? Nun, ich könnte sagen, dass es Informatik-Möglichkeiten gibt, um zu beweisen, dass eine Implementierung eines Algorithmus korrekt ist.

Noch pragmatischer: Wenn verschiedene Personen unterschiedliche Algorithmen verwenden und sich alle darauf einigen (eine Zahl auswählen), tausend (Millionen, was auch immer) Dezimalstellen auszuwählen, sollte dies Ihnen ein warmes, verschwommenes Gefühl geben, dass sie es richtig verstanden haben.

Historisch gesehen veröffentlichte William Shanks 1873 pi mit 707 Dezimalstellen. Armer Kerl, er machte einen Fehler, beginnend mit der 528. Dezimalstelle.

Sehr interessanterweise wurde 1995 ein Algorithmus veröffentlicht , der die Eigenschaft hatte, die n-te Ziffer (Basis 16) von pi direkt zu berechnen, ohne alle vorherigen Ziffern berechnen zu müssen !

Schließlich hoffe ich, dass Ihr ursprünglicher Algorithmus nicht pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...so einfach zu programmieren ist, aber es ist auch eine der langsamsten Möglichkeiten, dies zu tun. Weitere Informationen finden Sie im pi-Artikel auf Wikipedia .


7
Diese letzte Formel (Leibniz-Formel, iirc) wechselt tatsächlich Addition und Subtraktion.
Thomas

21

Sie können mehrere Ansätze verwenden und prüfen, ob sie zur gleichen Antwort konvergieren. Oder nimm etwas aus dem Netz. Der Chudnovsky-Algorithmus wird normalerweise als sehr schnelle Methode zur Berechnung von pi verwendet. http://www.craig-wood.com/nick/articles/pi-chudnovsky/


Reduziert die Chancen, aber ich kann immer noch nicht sicher sein, ob es sich um eine Lösung mit mehreren Ansätzen handelt. Was ist, wenn beide falsch sind? Das Überprüfen im Netz hat keine Gültigkeit. Warum also nicht die Werte aus dem Netz selbst entfernen? Ich denke über bbp nach, welches ist besser geeignet?
Ishan Sharma

7
@IshanSharma Wenn die beiden Algorithmen unabhängig sind, ist die Wahrscheinlichkeit, dass beide Berechnungen mit identischen Ergebnissen falsch sind, so gut wie Null. Wenn bei einer der Berechnungen etwas schief geht, stimmen die Endergebnisse nicht überein. Sie wissen also, dass mindestens eines davon falsch ist.
Mysticial

15

Die Taylor-Reihe ist eine Möglichkeit, pi zu approximieren. Wie bereits erwähnt, konvergiert es langsam.

Es kann gezeigt werden, dass die Teilsummen der Taylor-Reihe innerhalb eines Multiplikators des nächsten Terms vom wahren Wert von pi entfernt sind.

Andere Mittel zur Approximation von pi haben ähnliche Methoden zur Berechnung des maximalen Fehlers.

Wir wissen das, weil wir es mathematisch beweisen können.


Abgeordnet. Ich denke, die meisten Antworten hier legen einfach nicht genug Gewicht auf das Konzept des mathematischen Beweises . Was auch immer Ihr Programm für die Berechnung von pi-Ziffern ist, es wird niemals überzeugender sein als der überzeugendste mathematische Beweis, dass die Methode Ihres Programms tatsächlich pi berechnet. Dies deutet auf eine andere Einschränkung für Programme hin, die pi berechnen: Sie sollten sowohl auf Verständlichkeit als auch auf Leistung und Korrektheit abzielen .
Luis Casillas

5

Sie könnten versuchen, sin(pi/2)(oder cos(pi/2)was auch immer) mit der (ziemlich) schnell konvergierenden Potenzreihe für sin und cos zu rechnen. (Noch besser: Verwenden Sie verschiedene Verdopplungsformeln, um x=0für eine schnellere Konvergenz näher zu rechnen .)

Übrigens ist es besser, als Serien zu verwenden tan(x), wenn man cos(x)beispielsweise als Black Box berechnet (z. B. könnte man Taylor-Serien wie oben verwenden), die Wurzelfindung über Newton durchzuführen. Es gibt sicherlich bessere Algorithmen, aber wenn Sie nicht Tonnen von Ziffern überprüfen möchten, sollte dies ausreichen (und es ist nicht so schwierig zu implementieren, und Sie benötigen nur ein wenig Kalkül, um zu verstehen, warum es funktioniert.)


6
Ich verstehe nicht ganz, wie es helfen würde, zu erkennen, dass die 1000. Ziffer um 1 abweicht. Sie würden sehr genaue Werte von benötigen, sin(pi/2)nicht wahr?
Matthieu M.

Ich bin mir nicht sicher, was ich zu der vorherigen Antwort sagen soll, es sei denn, es ist ein Witz oder so. sin (pi / 2) = 1 cos (pi / 2) = 0 Ich würde also sagen, dass diese sicher schnell konvergieren.
BentFranklin

15
Ich denke, es ist nicht jedem klar, dass die Bewertung sin(x)und cos(x)die hohe Präzision tatsächlich viel schwieriger sind als die Berechnung von Pi selbst.
Mysticial

2
Aus offensichtlichen Gründen sollten Sie hierfür nicht sin (pi / 2) verwenden. Verwenden Sie stattdessen lieber sin (pi / 6) und stellen Sie sicher, dass es genau 1/2 ist.
Robert Lozyniak
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.