Näherungsbruch für Pi

...komplette Frage anzeigen

6 Antworten

Unter http://www.gerdlamprecht.de/Kreiszahl.htm
findet man über 100 Algorithmen für Pi!

Allein der Punkt "6. Bruch-Funktionen, die gegen Pi konvergieren"
zeigt mit §6a ... §6e 4 verschiedene Algorithmen, wie man Brüche bilden kann, die sich beliebig genau an Pi annähern... Per LINK kann man sich das entweder per Iterationsrechner Beispiel 81 online selbst nachrechnen lassen oder per Umkehrfunktionen Rechner die 86 Stellen berechnen lassen.

Bruch-Algorithmen sind jedoch umständlich. Die Frage lautet, was genau willst Du:
- nur Brüche? -> kann bis über 200stellige Zahlen besorgen....
- viele Stellen: 13,3 Bio. Stellen (10 TB !) sind bereits online
- selber programmieren -> welche Sprache & wieviele Stellen?
- selbst viele Stellen berechnen: mit y-cruncher (siehe LINK unten) 1 Mrd. in 4 min
- den schnellsten mathematischen Algorithmus: siehe §4e schafft 16. Ordnung!

hypergerd 23.02.2015, 15:20

Bei
27225206761227411560482016369101495245580376291277469609660747193789333391455909056988538515440420244451 / 8666052465496465627292667594900276640054365438839293273326351202074305984738201886052979281840113827831

stimmen schon über 100 Stellen.

Spielkram im Vergleich zu den 1 Mrd. Stellen von y-cruncher.exe ...

1
deRRatgebeR4 23.02.2015, 19:48
@hypergerd

Wow danke, das war genau das was ich gesucht hatte. Zu deinen Fragen: -Ja, ich möchte erst einmal nur Brüche. Später möchte ich mich dann mithilfe von einer Streifenunterteilung eines Kreises Pi nähern. Echt? 200-stellige gibt es? Kannst du mir die irgendwie zukommen lassen ;). -meine Sprache ist C#. Was meinst du genau mit wie viele Stellen? Wie viele Stellen ich nach dem Komma ausrechnen kann? Seeehhr viele... ;) 100.000.000.000 sind kein Problem. -Danke, y-cruncher.exe werde ich mir mal angucken...

0
hypergerd 23.02.2015, 21:25
@deRRatgebeR4

Die Frage "200-stellige gibt es?" beweist, dass Du §6a ... §6e nicht verstanden hast: der Algorithmus geht bis in alle Ewigkeit für Zähler und Nenner eines Bruches. Zwar sind beide noch nicht gekürzt (so wie meine beiden Angaben), aber wie der Iterationsrechner zeigt, sind schon mit i=4 Ganzzahlen mit 242 Stellen beteiligt. Ab i=5 werden nur noch die Potenzen angezeigt.

100 Mrd. Stellen von Pi in c# -> das geht nicht unter 1 Woche Rechenzeit!

Du meinst vermutlich 1 Division durch 1 ganze Zahl kleiner 100000 (und Ergebnis hat dann diese 100 Mrd. Stellen). Wie lange brauchst Du denn, um nur 2 Zahlen mit je 1 Mio. Nachkommastellen zu dividieren?

Y-cruncher (hoch optimierter c++ Code 64 Bit) kann 1 Mio. Stellen (nicht nur Wurzeln und Kehrwerte) in unter 1s .

1
hypergerd 25.02.2015, 10:03
@hypergerd

Oder §7a: Wenn man Laufvariable k bis 190 durchrechnet und das Zwischenergebnis zu einem einzigen Bruch zusammenfasst, bekommt man 721 stellige Zahlen, die mit 235 Pi-Nachkommastellen übereinstimmen. (siehe dort)

Also verstanden: Fast JEDER dieser 100 Algorithmen könnte einen Näherungsbruch erzeugen, wenn man einfach "Mittendrin" abbricht und das Zwischenergebnis in die Form eines einzigen Bruches wandelt!

1

Für Pi gibt es eine Reihe. http://de.wikipedia.org/wiki/Leibniz-Reihe Ich frage mich allerdings, wie Du die ganzen Nachkommastellen abspiegelst. Die meisten Datentypen können ja nur eine gewisse Länge von Fließkommazahlen abspeichern und somit auch berechnen (der CPU muss ja hier auch mitspielen).

hypergerd 23.02.2015, 21:00

Zwar einfach aufzuschreiben, aber eine mit einer sehr langsamen Konvergenzgeschwindigkeit:
Für gerade einmal 8 Nachkommastellen benötigt man 1 Mrd. Iterationen!

§4d (siehe mein LINK) schafft mit 10 Iterationen über 13 Mio. richtige Nachkommastellen.

1

Das Zauberwort heißt Kettenbruchentwicklung. Damit kannst du den Bruch genau bis zu einer sehr großen Genauigkeit bestimmen. Für 21 Kettenbruchelemente hast du bereits den Bruch 21053343141 / 6701487259. Auf der folgenden Seite findest du die ersten paar Kettenbruchelemente. http://oeis.org/A001203

Damit wirst du eine ausreichende Genauigkeit erzielen. Das ist sogar auf Wikipedia erklärt unter "Kreiszahl". Dort unter Kettenbruchentwicklung.

deRRatgebeR4 22.02.2015, 21:46

Aber wie komme ich mit den Zahlen der Seite zu dem Bruch?

0
WhoGivesACrap 22.02.2015, 22:07
@deRRatgebeR4

Na du berechnest das doch mit einem PC. Diese Zahlenreihe sind immer die Zahlen vor dem Plus unterm Bruchstrich. Auf das Plus folgt dann 1 geteilt durch die nächste Zahl Plus 1 geteilt durch nächste Zahl und so weiter. Das kannst du programmiertechnisch rekursiv oder iterativ mit einer Schleife lösen. Die Zahlenreihe kannst du in ein Array packen. Du brichst halt an einer bestimmten Stelle ab wo dann unterm Bruchstrich nur die Zahl ohne das Plus und den folgenden Bruch steht. Am Ende erhälst du sowas wie x + 1 / y. Daraus machst du z.B. (x * y) / y + 1 / y und erhälst als Ergebnis (x * y + 1) / y was dann dein Bruch ist.

0

Wenn du mit Computern arbeitest wirst irgendwann an das Limit stoßen, dass diese insbesondere bei Fließkommrechnung gerne "Rundungsfehler" machen. Daher würd ich dir empfehlen es z.B. mit den BBP-Reihen oder anderen Näherungen zu versuchen. Du findest dafür ausführliche Beschreibungen auf Wiki und im Rest des Internets.

deRRatgebeR4 22.02.2015, 21:44

Ich rechne in dem Programm die nächste Nachkommastelle aus und füge die dann einem String hinzu. Dann teile ich den Rest multipliziert mit 10 wieder durch die Zahl durch die ich auch vorher geteilt habe.

0

Hallo !

Mit wie vielen Stellen nach dem Komma bei nicht ganzzahligen Kommazahlen die zwischen 0 und 1 liegen rechnet deine Programmiersprache maximal ?

Das ist eine entscheidende Information !

LG Spielkamerad

deRRatgebeR4 22.02.2015, 22:16

unendlich viele wenn die Zeit dafür da wäre ;)

1
Spielkamerad 22.02.2015, 22:28
@deRRatgebeR4

Das stimmt nicht :-)) !

Jede Programmiersprache kann nur Fließkommazahlen einer bestimmten Länge bearbeiten !

Wenn du uns diese Information nicht gibst ist es unmöglich dir einen Bruch zu nennen den deine Programmiersprache verarbeiten kann und somit unmöglich deine Frage zu beantworten !

Falls deine Programmiersprache mit 16 signifikanten Zahlenstellen arbeitet dann probiere mal diesen Bruch -->

7853981633974483/2500000000000000

2
Roderic 22.02.2015, 23:26
@Spielkamerad

Für jede Programmiesprache gibts Bibliotheken für eine sogenannte

Ganzzahlarithmetik

Damit kann man auch rationale Brüche mit beliebiger Genauigkeit verarbeiten.

0
deRRatgebeR4 23.02.2015, 19:40
@Spielkamerad

Doch das stimmt! ;) Ich muss mich ja nicht an die von der Programmiersprache (in meinem Fall C#) vorgeschlagenen Fließkommazahlen halten. Denn ich habe mir meine eigene Klasse für die Division mit BigIntegern und einem Ergebnis mit über 100.000.000.000 Nachkommastellen programmiert. Dein Bruch ist nicht schlecht, hilft mir aber auch nicht wirklich weiter. Denn das Ergebnis ist 3.1415926535897932. So weit so gut. Allerdings möchte ich noch meeehhhr Nachkommastellen ;).

1
hypergerd 25.02.2015, 08:55
@Spielkamerad

Das ist §2b von meinem LINK. Sie schafft nur 8 richtige Stellen pro Term (Iteration).
Hinweis: 4 * 99=396
§2c schafft 14 Stellen/Iteration
§2d schafft 50 Stellen/Iteration ...

1

Was möchtest Du wissen?