π auf hundert stellen berechnen c#?

3 Antworten

Du könntest dir ersteinmal deinen eigenen Pi-Berechnungs-Alg schreiben. Beispiele wie soetwas aussehen kann, gibt es zu hauf im Netz. Dann sorgst du dafür das jeweils die zu letzt berechnete Stelle in ein String geschrieben wird. Am besten schreibst du das in ein Stringbuilder-Obj dem du denn gewünschten Längenwert vorgibst.

https://msdn.microsoft.com/de-de/library/system.text.stringbuilder(v=vs.110).aspx

StringBuilder stringBuilder = new StringBuilder(x);

x ist die gewünschte Länge + Platz für "4.".

Der Grund ist, wenn du dann mit wirklich großen Werten arbeitest, würde das arbeiten direkt über string ziemlich auf die Geschwindigkeit gehen.


ceevee  08.08.2016, 08:50

Anstelle des Stringbuilders würde ich mir eine BigNumber-Library suchen, z.B.

https://bignumber.codeplex.com/

. Aber ansonsten ist die Antwort korrekt, so würde ich es auch machen. In der Math.PI-Konstanten sind nur 14 Stellen abgespeichert, deswegen muss der Fragesteller sich selbst überlegen, wie er Pi ausrechnet.

2
Jonas711  08.08.2016, 11:00

x ist die gewünschte Länge + Platz für "4.".

"4."?

0
Chippo78  08.08.2016, 14:33
@Jonas711

@ Jonas
Habe mich vertippt, meinte natürlich 3. Tschuldigung. Also 3.141...

0

Wie man unter http://www.gerdlamprecht.de/Kreiszahl.htm

sieht, gibt es nicht 1, sondern hunderte Algorithmen für Pi.

Wenn man nur 100 Stellen braucht, kann man auch die Summe von §7a von k=0 bis 81 ausrechnen, das ergibt den Bruch

462533469414132740772898823355674778981053206812446539591351424689909455879710469823436916950817804855369657856742431975005753189453708076485794679520643478600815677439378021169539873984607214560712161804450160027431477779324050765298442375841036079481138389039088471044630547396286216727883363130800193
/ 147228976005406416456605889545234663708007132214287099502671761731579623900279550136942123575012097144279697449259580107591629642263084558372712139113827838066394827831985133188307694217350562300332574548559348072311957055907621362197137385735341359051650074008136782822625040058828668282141272965120000

also nur 1 Division -> einfach so programmieren, als wenn Du schriftlich dividieren würdest...

was 102 übereinstimmende Nachkommastellen mit Pi ergibt.

Unter §2f ist der c-Code (nur 138 Byte) für 15000 Stellen von Pi.

Mit dem langsamen c# (denn das ist kein richtiger Compiler) wird es jedoch länger dauern!

Bevor ich mehr antworte (denn mit gutem c Code kann man 1 Mrd. Stellen in unter 4 min berechnen), brauche ich Deine Ziele:

- muss es unbedingt das langsame c# sein?

- wenn schon mehr als die Standard-double-Genauigkeit, warum nur 100 Stellen 

- soll es eine exe werden, oder kann es auch eine html Seite sein?


TeeTier  08.08.2016, 19:14
Leider ist nur ein Bruchteil des Internets so gehaltvoll wie deine Website! Ich finde deine Themen dort immer sehr spannend, interessnt und vor allem inspirierend. Von der Sorte sollte es viel mehr geben.

Irgendwie bekommt man dabei immer richtig Lust auf irgendwelche "Spielereien". :)

Du hast übrigens geschrieben, dass du für 1 Mrd. Nachkommastellen mit einer C-Implementierung ca. 4 Minuten brauchst.

Ich brauche dabei nur etwas über eine Minute in der Shell:

#!/bin/bash

time -p wget http://stuff.mit.edu/afs/sipb/contrib/pi/pi-billion.txt

Aber ich denke, das zählt nicht. :)

1

Dadurch werden andere Rechnungen, die π verwenden definitiv nicht wesentlich genauer.

Beispiele dafür gibt es genug im Internet.

Wenn du dir eine Excel-Tabelle mit π erstellst, die die maximalen Stellen immer um eine Ziffer nach dem Komma reduziert, wirst du feststellen, dass π schon bei 7 Stellen nach dem Komma immer das gleiche Ergebnis „produziert“. => Viele Nachkommastellen erhöhen nicht die Genauigkeit, bzw. gaukeln eine Genauigkeit vor, die für die Praxis irrelevant ist.

  • Maurer arbeiten auf den cm genau
  • Schreiner und Tischler arbeiten auf etwa 2 mm genau
  • Schlosser arbeiten auf den mm genau
  • Feinmechaniker arbeiten auf einen hundertstel mm genau. Wie soll man da mit sinnvoll nutzbaren und bezahlbaren!! Messwerkzeugen „genauer“ messen!