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 |