Pi-Näherung mit Leibniz-Reihe

ManuJo

Mitglied
Meine lieben Freunde,

ich bin am verzweifeln. Ich muss ein Programm erstellen, dass pi anhand der Leibniz-Reihe exakt auf n-Nachkommastellen(mehr als 15) berechnet. Jedoch komme ich mit meinen Versuchen gerade mal auf exakte 8 Nachkommastellen. Kennt ihr eine Möglichkeit, mir zu helfen?

Quellcode:

public class LeibnizFormula2{
public static void main(String[] args) {
int count = 2147400000;
double pi = 0;
double denominator = 1;
for (int x = 0; x < count; x++) {
if (x % 2 == 0) {
pi = pi + (1 / denominator);
} else {
pi = pi - (1 / denominator);
}
denominator = denominator + 2;
}
pi = pi * 4;
System.out.println(pi);
}
}
 

httpdigest

Top Contributor
Ein paar Probleme:
1. Die Leibniz-Reihe konvergiert seeeeehr seeeehr langsam gegen PI. Wenn du wirklich bis zu 15 signifikante Stellen (das Maximum von double) willst, wird das ein paar Jahrhunderte Rechenzeit dauern
2. Wie gesagt, double kann nur bis zu ca. 15 signifikante Dezimalstellen. Und die 3 vor dem Dezimaltrennzeichen ist eine der signifikanten Stellen. Du könntest BigDecimal verwenden, aber das wird die Laufzeit nochmal locker um den Faktor 10 verlangsamen.

Wenn du einfach den Code von https://www.javacodex.com/Math-Examples/Leibniz-Formula-For-PI genommen hast, und den größtmöglichen Integer für count nimmst, kommst du nicht auf höhere Genauigkeit. Du müsstest schon pro Iteration checken, ob du jetzt schon nah genug dran bist (z.B. durch Vergleich mit Math.PI):
Java:
public static void main(String[] args) {
  double pi = 0;
  double denominator = 1;
  while (Math.abs(pi - Math.PI) > 1E-11) {
    pi += 4.0 / denominator;
    denominator += 2;
    pi -= 4.0 / denominator;
    denominator += 2;
  }
  System.out.println(pi - Math.PI);
}
Der obige Code läuft für ein paar Minuten.
 

krgewb

Top Contributor
Bitte immer in Code-Tags posten.
Java:
public class LeibnizFormula2 {
    public static void main(String[] args) {
        int count = 2147400000;
        double pi = 0;
        double denominator = 1;
        for (int x = 0; x < count; x++) {
            if (x % 2 == 0) {
                pi = pi + (1 / denominator);
            } else {
                pi = pi - (1 / denominator);
            }
           denominator = denominator + 2;
        }
        pi = pi * 4;
        System.out.println(pi);
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben