# Pi-Näherung mit Leibniz-Reihe



## ManuJo (21. Mrz 2019)

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 (21. Mrz 2019)

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):

```
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.


----------



## ManuJo (21. Mrz 2019)

Gibt es eine leichtere Möglichkeit, mit Arcus tangens pi exakter und schneller zu konvergieren?


----------



## httpdigest (21. Mrz 2019)

Lies dir mal das hier durch: https://en.wikipedia.org/wiki/Approximations_of_π


----------



## krgewb (25. Mrz 2019)

Bitte immer in Code-Tags posten.

```
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);
    }
}
```


----------

