Archimdes-Methode zur Berechnung von Pi
-
Hallo Ihr Lieben, vielleicht könnt Ihr mir helfen?
Mag sein, daß einigen von Euch die Archimdes-Methode zur Berechnung von Pi etwas sagt, bei der der Näherungwert von Pi über In- und Umkreise eines n-Ecks berechnet wird.
Könnte mir jemand den folgenden Quelltext in ein funktionierendes C++-Programm umschreiben???
Vielen Dank schon mal im Voraus...
Quelltext
program archpi;
{$n+} { laesst den Coprozessor mitrechnen }uses
crt;var
a, { Umfang des umschreibenden n-Ecks }
b: double; { Umfang des einbeschriebenen n-Ecks }
n: integer;begin
a := 2sqrt(3); { Startwerte }
b := 3;
n := 0;
repeat
writeln(a:0:17, ' > pi > ', b:0:17, ' (62^', n, '-Eck, delta = ', a-b:6, ')');
a := 2*a*b/(a+b);
b := sqrt(a*b);
inc(n);
until readkey = #27;
end.Ergebnis
Das soeben beschriebene Programm gibt diesen Text aus:
3.46410161513775439 > pi > 3.00000000000000000 (6*2^0-Eck, delta = 4.6E-0001) 3.21539030917347235 > pi > 3.10582854123024887 (6*2^1-Eck, delta = 1.1E-0001) 3.15965994209750045 > pi > 3.13262861328123821 (6*2^2-Eck, delta = 2.7E-0002) 3.14608621513143483 > pi > 3.13935020304686718 (6*2^3-Eck, delta = 6.7E-0003) 3.14271459964536826 > pi > 3.14103195089050979 (6*2^4-Eck, delta = 1.7E-0003) 3.14187304997982375 > pi > 3.14145247228546198 (6*2^5-Eck, delta = 4.2E-0004) 3.14166274705684856 > pi > 3.14155760791185745 (6*2^6-Eck, delta = 1.1E-0004) 3.14161017660468955 > pi > 3.14158389214831812 (6*2^7-Eck, delta = 2.6E-0005) 3.14159703432152604 > pi > 3.14159046322805002 (6*2^8-Eck, delta = 6.6E-0006) 3.14159374877135189 > pi > 3.14159210599927130 (6*2^9-Eck, delta = 1.6E-0006) 3.14159292738509688 > pi > 3.14159251669215722 (6*2^10-Eck, delta = 4.1E-0007) 3.14159272203861351 > pi > 3.14159261936538359 (6*2^11-Eck, delta = 1.0E-0007) 3.14159267070199766 > pi > 3.14159264503369062 (6*2^12-Eck, delta = 2.6E-0008) 3.14159265786784392 > pi > 3.14159265145076727 (6*2^13-Eck, delta = 6.4E-0009) 3.14159265465930559 > pi > 3.14159265305503643 (6*2^14-Eck, delta = 1.6E-0009) 3.14159265385717079 > pi > 3.14159265345610361 (6*2^15-Eck, delta = 4.0E-0010) 3.14159265365663742 > pi > 3.14159265355637052 (6*2^16-Eck, delta = 1.0E-0010) 3.14159265360650375 > pi > 3.14159265358143713 (6*2^17-Eck, delta = 2.5E-0011) 3.14159265359397022 > pi > 3.14159265358770368 (6*2^18-Eck, delta = 6.3E-0012) 3.14159265359083673 > pi > 3.14159265358926998 (6*2^19-Eck, delta = 1.6E-0012) 3.14159265359005335 > pi > 3.14159265358966167 (6*2^20-Eck, delta = 3.9E-0013) 3.14159265358985751 > pi > 3.14159265358975937 (6*2^21-Eck, delta = 9.8E-0014) 3.14159265358980822 > pi > 3.14159265358978379 (6*2^22-Eck, delta = 2.4E-0014) 3.14159265358979578 > pi > 3.14159265358978956 (6*2^23-Eck, delta = 6.2E-0015) 3.14159265358979267 > pi > 3.14159265358979134 (6*2^24-Eck, delta = 1.3E-0015) 3.14159265358979223 > pi > 3.14159265358979178 (6*2^25-Eck, delta = 4.4E-0016) 3.14159265358979223 > pi > 3.14159265358979223 (6*2^26-Eck, delta = 0.0E+0000)
-
hallo du lieber..
so stimmts rechnerisch noch nicht ganz, such, wo es noch hängt.
auf die formatierungen hatte ich keine lust
und standard ist es durch den schleifenabbruch auch nicht.
aber vielleicht hilfts#include <cmath> #include <iostream> #include <conio.h>//nicht standard, für getch using namespace std; int main() { double a; double b; int n; a=2*sqrt(3); do{ cout<<a <<endl; a = 2*a*b/(a+b); b = sqrt(a*b); n++; }while (getch() !=27); }