erzeugt Pi bis n-te Stelle Java

8

Ich wollte wissen, wie ich Pi bis zur n-ten Ziffer erzeugen kann. Ich habe ein paar grundlegende Ideen.

  1. Verwende Math.PI und erhöhe die Genauigkeit (wenn das möglich ist)
  2. Benutze Eulers Formel, um Pi zu erzeugen, aber auch hier müsste ich die Präzision erhöhen (denke ich)
  3. Es gibt auch Srinivasa Ramanujans Formel zur Erzeugung von PI, die für ihre schnelle Konvergenz bekannt ist. Diese Formel scheint schwierig zu implementieren. Ich glaube, ich müsste hier auch die deikmale Präzision erhöhen.

Kurz gesagt, in jedem Fall müsste ich die Genauigkeit von BigDecimal abhängig von der n-ten Ziffer erhöhen. Wie würde ich die Genauigkeit von BigDecimal auf n-te Stelle erhöhen? Wenn es eine bessere und schnellere Lösung gibt, können Sie mich bitte in die richtige Richtung weisen.

EDIT: Ich möchte nur PI erzeugen. Ich möchte nicht für Berechnungen verwenden. und das ist eine Frage darüber, wie ich mit BigDecimal meine Ideen zum Erzeugen von PI umsetzen kann.

    
Jeel Shah 03.12.2011, 19:21
quelle

3 Antworten

6
  • Math.PI hat den Typ double . Das bedeutet etwa 15 Dezimalstellen Genauigkeit, und das sind alle Daten, die Sie haben; nichts wird auf magische Weise zusätzliche Ziffern von PI erscheinen lassen.
  • BigDecimal hat eine beliebige Genauigkeit. Mit setScale() können Sie BigDecimal -Objekte so genau erstellen, wie Sie möchten, und die meisten arithmetischen Methoden erhöhen automatisch die Genauigkeit wie gewünscht, aber je genauer, desto langsamer werden natürlich alle Berechnungen.
  • Der schwierigste Teil bei der Implementierung von Ramanujans Formel ist ironischerweise das sqrt (2) im konstanten Faktor, da es für BigDecimal kein integriertes sqrt () gibt, also müssen Sie Ihr eigenes schreiben.
Michael Borgwardt 03.12.2011, 19:27
quelle
3

Sie müssen MathContext verwenden, um die Genauigkeit von BigDecimal

zu erhöhen

z.B.

%Vor%

Es ist wichtig, dass ALLE BigDecimal s, die Sie in Ihren Berechnungen verwenden, das MathContext verwenden. Herons Methode sollte Ihnen eine Genauigkeit von 1000 Stellen mit nur 10 Iterationen und eine Million Ziffern mit 20 Iterationen geben, also ist es sicherlich gut genug. Erstellen Sie auch alle Konstanten BigDecimal s wie z. 26390 nur einmal am Anfang Ihres Programms.

    
SpiderPig 03.12.2011 21:34
quelle
0

Sie können diesen Code verwenden

%Vor%

Ressource

    
ggmax 27.07.2013 14:43
quelle

Tags und Links