Pi berechnen

Im Stellenwertsystem (1; 1/3, 2/5, 3/7, 4/9, 5/11, ...) hat die Zahl Pi die Darstellung 2,22222... und etwa vier Stellen dieses Systems entsprechen der Genauigkeit einer Dezimalstelle.

Die hier definierte Funktion summiert 4n Stellen des oben angegebenen Stellenwertsystems und rundet das Ergebnis auf n Dezimalstellen ab.

(defproc pi (n)
  (let
    ((p 1)
     (s 0))
    (dotimes (i (* 4 n) (approximate s (expt 1/10 n)))
      (setq s (+ s p p))
      (setq p (* p (+ i 1) (/ (+ i i 3)))))))

Die Funktion initialisiert die lokalen Variablen p mit 1 und s mit 0. Dann führt sie mit dotimes die beiden Zuweisungen s := s + 2 p und p = p (i + 1) / (2 i + 3) wiederholt in einer Schleife 4 n mal aus. Die Schleifenvariable i hat anfangs den Wert 0. Bei jedem Durchlauf wird der Wert von i um eins erhöht.

Da die Funktion pi sich nicht selbst aufruft, ist sie nicht rekursiv (siehe Rekursion). Weil anstatt dessen eine Schleife verwendet wird, handelt es sich um eine sogenannte iterative Funktion.

Die Funktion liefert für die ersten ca. 500 Stellen von Pi das Ergebnis

3.14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436
78925903600113305305488204665213841469519415116094
33057270365759591953092186117381932611793105118548
07446237996274956735188575272489122793818301194912
983367336244.

Die Hilfsfunktion expt berechnet die Potenz einer Zahl (siehe Potenzen berechnen).

Links
https://de.wikipedia.org/wiki/Tr%C3%B6pfelalgorithmus
http://www.mathpropress.com/stan/bibliography/spigot.pdf


pi.sheet.xml