Einem Kreis werden reguläre n-Ecke mit Umfang un bzw. Un ein- bzw. umbeschrieben. Mit Kreisradius 0,5 gilt: un < π < Un.
Im Listing 1 treten schon nach wenigen Iterationsschritten wegen der kleinen Werte unter der Wurzel Rundungsfehler auf, was durch eine algebraische Umformung im Listing 2 behoben wird. Listing 3 berechnet sowohl den Umfang ein- als auch umbeschriebener n-Ecke.
PROGRAM PI_Archimedes_1;
USES crt;
VAR u:real;
n,max: longint;
BEGIN
clrscr;
writeln('PI-Berechnung nach Archimedes');
writeln;
write('maximale Eckenzahl? ');readln(max);
writeln;
writeln('n u(n)');
n:=6; u:=3; {Start mit Sehnen-6-Eck}
REPEAT
writeln(n:9,' ',u:11:10);
u:=n*sqrt(2-2*sqrt(1-sqr(u/n)));
n:=n*2;
UNTIL n>max;
readln;
END.
|
n u(n)
6 3.0000000000
12 3.1058285412
24 3.1326286132
48 3.1393502029
96 3.1410319508
192 3.1414524712
384 3.1415575977
768 3.1415838514
1536 3.1415904255
3072 3.1415916208
6144 3.1415895717
12288 3.1415868397
24576 3.1415868397
49152 3.1414994119
98304 3.1409747940
196608 3.1402751671
393216 3.1374750995
786432 3.1374750995
1572864 3.0000000000
3145728 3.0000000000
6291456 0.0000000000
12582912 0.0000000000
|
PROGRAM PI_Archimedes_2;
USES crt;
VAR u:real;
n,max: longint;
BEGIN
clrscr;
writeln('PI-Berechnung nach Archimedes');
writeln;
write('maximale Eckenzahl? ');readln(max);
writeln;
writeln('n u(n)');
n:=6; u:=3; {Start mit Sehnen-6-Eck}
REPEAT
writeln(n:9,' ',u:11:10);
u:=2*u/sqrt(2+2*sqrt(1-sqr(u/n)));
n:=n*2;
UNTIL n>max;
readln;
END.
|
n u(n)
6 3.0000000000
12 3.1058285412
24 3.1326286133
48 3.1393502030
96 3.1410319509
192 3.1414524723
384 3.1415576079
768 3.1415838921
1536 3.1415904632
3072 3.1415921060
6144 3.1415925167
12288 3.1415926193
24576 3.1415926450
49152 3.1415926514
98304 3.1415926530
196608 3.1415926534
393216 3.1415926535
786432 3.1415926535
1572864 3.1415926536
3145728 3.1415926536
6291456 3.1415926536
12582912 3.1415926536
|
PROGRAM PI_Archimedes_3;
USES crt;
VAR uein,uum:real;
n,max: longint;
BEGIN
clrscr;
writeln('PI-Berechnung nach Archimedes');
writeln;
write('maximale Eckenzahl? ');readln(max);
writeln;
writeln('n u(n) U(n)');
n:=6; uein:=3; uum:=2*sqrt(3); {Start mit 6-Eck}
REPEAT
writeln(n:9,' ',uein:11:10,' ',uum:11:10);
uein:=2*uein/sqrt(2+2*sqrt(1-sqr(uein/n)));
n:=n*2;
uum:=uein/(sqrt(1-sqr(uein/n)));
UNTIL n>max;
readln;
END.
|
n u(n) U(n)
6 3.0000000000 3.4641016151
12 3.1058285412 3.2153903092
24 3.1326286133 3.1596599421
48 3.1393502030 3.1460862151
96 3.1410319509 3.1427145996
192 3.1414524723 3.1418730500
384 3.1415576079 3.1416627470
768 3.1415838921 3.1416101766
1536 3.1415904632 3.1415970343
3072 3.1415921060 3.1415937488
6144 3.1415925167 3.1415929274
12288 3.1415926193 3.1415927220
24576 3.1415926450 3.1415926707
49152 3.1415926514 3.1415926578
98304 3.1415926530 3.1415926546
196608 3.1415926534 3.1415926538
393216 3.1415926535 3.1415926536
786432 3.1415926535 3.1415926536
1572864 3.1415926536 3.1415926536
3145728 3.1415926536 3.1415926536
6291456 3.1415926536 3.1415926536
12582912 3.1415926536 3.1415926536
|