Script zu pie?

2 Antworten

Zuerst brauchst Du eine Formel zur Berechnung von π. Wenn keine vorgegeben ist, würde ich die BPP-Formel nehmen. Um die gewünschte Stellenzahl zu bekommen, sollte es reichen, die Reihe so weit zu berechnen, bis 1/16^k<10^-50.

In Python kannst Du mit Brüchen exakt rechnen, das Ergebnis mal 10^50 nehmen und in einen int wandeln. Dann steht das Ergebnis da.

Falls die letzte Ziffer eine 9 ist, solltest Du noch einen Iterationsschritt drauflegen.

ralphdieter  09.12.2022, 21:29
#!/usr/bin/env python3

from fractions import Fraction

def bpp_term ( k ):
   return ( Fraction(4, 8*k+1) - Fraction(2, 8*k+4)
          - Fraction(1, 8*k+5) - Fraction(1, 8*k+6) ) / 16**k

prec = 10**50
pi = bpp_term(0)
print( " %52d" % int(pi*prec) )

for k in range(1, 40):
   tk = bpp_term(k)
   print( "+ %52d" % int(tk*prec) )
   pi += tk
   print( "= %52d" % int(pi*prec) )

Ausgabe:

  313333333333333333333333333333333333333333333333333
+    808913308913308913308913308913308913308913308913
= 314142246642246642246642246642246642246642246642246
+     16492392411510058568882098293862999745352686529
= 314158739034658152305211128740540505246387599328775
+       506722085385878489326765188834154351395730706
...
+                                                  47
= 314159265358979323846264338327950288419716939937507
+                                                   2
= 314159265358979323846264338327950288419716939937510
+                                                   0
= 314159265358979323846264338327950288419716939937510
0

Wenn die Programmiersprache frei wählbar ist empfehle ich Python:

# Importieren der math-Bibliothek
import math

# Berechnen der ersten 50 Stellen von Pi
pi_value = math.pi

# Ausgabe der ersten 50 Stellen von Pi
print(round(pi_value, 50))

Alternativ in Java:

public class PiCalculator {
  public static void main(String[] args) {
    double pi = 0;
    int n = 50; // Anzahl der Stellen, die berechnet werden sollen
    
    // Berechnen der ersten 50 Stellen von Pi
    for (int i = 0; i < n; i++) {
      pi += (Math.pow(-1, i) / (2 * i + 1));
    }
    
    // Ausgabe der berechneten Stellen von Pi
    System.out.println(pi * 4);
  }
}


ralphdieter  07.12.2022, 03:02

Das wird so nicht klappen:

Sowohl in Python als auch in Java sind Gleitpunktzahlen auf ca. 15 Stellen begrenzt. Und bei der Leibniz-Reihe muss Du wesentlich mehr als die ersten 50 Glieder berechnen, nämlich ca. 10^50/4 Glieder. Das könnte etwas dauern...

0