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 π wird
das Verhältnis Kreisumfang zu Kreisdurchmesser bezeichnet; π heißt "Kreiszahl". Ihr genauer
Wert ist nicht bekannt, doch zeigte Archimedes (287-212 v. Chr.), daß π 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 π
durch eine unendliche Reihe:
π/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 π
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
π = 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
π = 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:
1² 3² 5² 7²
π = 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
7²
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 12 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 π 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://o.viennet.free.fr/themedetude/09_nombre_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