Ein einfaches Pi-Programm für 1000 Stellen

 

(Seite erstellt unter Windows und mit dem Internet Explorer. Mit anderen Systemen und Browsern sind ein Schreibfehler - lat. p statt griech. pi - und falsche Einrückungen bei den Formeln möglich.)

 

Mit p wird  das Verhältnis Kreisumfang zu Kreisdurchmesser bezeichnet; p heißt "Kreiszahl". Ihr genauer Wert ist nicht bekannt, doch zeigte Archimedes (287-212 v. Chr.), daß p zwischen 310/71 und 310/70 liegt. Ein dezimaler Näherungswert ist 3,14. Obwohl dieser für viele Anwendungsszwecke ausreicht, reizte es seit der Antike Mathematiker in Europa und Asien (hier: hauptsächlich China und Indien) immer wieder, weitere Nachkommastellen von p zu bestimmen, was bis heute nicht aufgehört hat. Dabei stellte sich heraus, daß sie unregelmäßig aufeinander folgen und es auch keine Periode wie bei gewöhnlichen Brüchen gibt.

 

Regelmäßig ist dagegen die Darstellung von p durch eine unendliche Reihe:

 

p/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 - + ... .                         (1)

 

Sie stammt von Leibniz (1646-1716)  und wird im englischen Sprachraum oft auch nach dem britischen Mathematiker Gregory (1638-1675) benannt.

 

Die Leibnizreihe konvergiert sehr langsam und ist für die praktische Berechnung von Näherungswerten für p nicht geeignet. An ihrer Stelle werden andere Reihen verwendet, dazu unendliche Produkte, Kettenbrüche und -wurzeln sowie bestimmte Integrale und rekursive Methoden. Die Palette der sich bietenden Möglichkeiten ist groß. Reichhaltige Übersichten  (Stand: Ende des 20. Jahrhunderts) findet man hier [1] und hier [2].

 

Im Jahre 1995 kehrten die beiden Amerikaner S. Rabinowitz und S. Wagon [3] zur Leibnizreihe zurück und formten sie nach [1] mit Hilfe der Euler-Transformation (die hier nicht erklärt werden kann) wie folgt um:

 

        1     2     3

p = 2 + -(2 + -(2 + -(2 + ...))) .                                 (2)

        3     5     7         

 

Bei dieser verschachtelten Klammerschreibweise wird auch multipliziert, wodurch sich die Konvergenzgeschwindigkeit beträchtlich erhöht.

 

Die Leibnizreihe (1) beruht auf der Reihe für die Arkustangensfunktion. Verwendet man an ihrer Stelle die Reihe für den Arkussinus mit dem Argument ½, dann ergibt sich für die Kreiszahl:

     

        1    3·3       3·3·5       3·3·5·7 

p = 3 + - + ------ + --------- + ----------- + ...  .              

        8   4·32·5   4·6·128·7   4·6·8·512·9

 

Dies läßt sich ohne die Euler-Transformation durch einfaches, fortgesetztes Ausklammern umformen in:  

 

                                     

p  =  3 + -----(3 + -----(3 + -----(3 + -----(3+  ...)))).         (3)

          8·1·3     8·2·5     8·3·7     8·4·9    

 

(3) wird weder in [1] noch in [2] und anscheinend auch nirgends im Internet erwähnt, ist also vermutlich neu. Vor allem aber konvergiert (3) doppelt so schnell wie (2) und wird deshalb von mir für die angenäherte Berechnung von p verwendet.

 

Die praktische Anwendung dieser Formel ist einfach. Man beginnt am besten hinten und

                                   

           rechnet  3·-----,  addiert  3, multipliziert das Ergebnis mit 5² und dividiert durch  8·3·7,    

                  8·4·9      

addiert wiederum 3, multipliziert mit 3² und dividiert durch  8·2·5, addiert, multipliziert, dividiert, ..., bis man vorne angekommen ist. Mit dem Taschenrechner erhält man auf diese Weise in 5 Schritten für p den Näherungswert 3,141511..., d.h. bereits 4 richtige Nachkommastellen. (Mit der Formel von Rabinowitz-Wagon ergeben sich mit 11 Schritten 3 richtige Dezimalen.)

 

Will man mit dem Computer eine wesentlich größere Stellenzahl erhalten,  reicht dessen "natürliche", auf ca. 15 Nachkommastellen begrenzte Rechengenauigkeit nicht aus. Das folgende Pascal-Programm enthält deshalb zwei Prozeduren, in denen das schriftliche Multiplizieren und Dividieren nachgeahmt wird. Eine besondere Prozedur für die Addition ist nicht nötig; es genügt, bei jedem Schritt den Inhalt der ersten Speicherplatz-Zelle des verwendeten Arrays um 3 zu erhöhen.

 

Program pitau; {1000 Stellen von Pi}

 uses crt,dos;const n=1000;

 Var  i,j,k:integer;c,d,q,u,x:word;

      a    :array[1..n+1] of word;

procedure divi(y:word);

begin

 c:=0;for j:=1 to n+1 do

 begin x:=a[j]+c;q:=x div y;a[j]:=q;

 d:=x-y*q;c:=10*d;end;

end;

procedure mult(y:word);

begin

 for j:=1 to n+1 do a[j]:=y*a[j];

 for j:=n+1 downto 2 do

 begin u:=a[j] div 10;a[j-1]:=a[j-1]+u;

 a[j]:=a[j] mod 10;end;

end;

Begin

 clrscr;k:=trunc(n*ln(10)/ln(4));

 for i:=k downto 1 do begin divi(8);

 divi(i);mult(2*i-1);divi(2*i+1);

 mult(2*i-1);a[1]:=a[1]+3;end;write(' ');

 for i:=1 to n+1 do begin write(a[i]);

 if i=1 then write('.');if (i mod 6=0) then

 write(' ');if wherex=80 then write('   ');

 end;write('... (1000 Stellen)');repeat

 until keypressed;

End.

 

Das Programm liefert auf einem Computer mit 500 MHz Taktfrequenz 1000 Stellen von p in einer Sekunde.

 

Literatur

[1] Jörg Arndt, Christoph Haenel: Pi, Springer Verlag, 2. Auflage, 2000

[2] Gérard Sookahet: Formules et Algorithmes pour évaluer Pi,       

     http://www.multimania.com/gersoo/docs/pi/pi.pdf

[3] Rabinowitz S. and Wagon S., A spigot algorithm for π, American Mathematical

     Monthly 102(1995), p. 195-203 

 

Seite erstellt am 10.10.01

Zurück zur Pi-Auswahlseite