In
diesem Beitrag beschreibt Chakotay die Approximation von Pi anhand des "spalten-Verfahrens". Ich musste im Rahmen eine Schulprojektes die 3 folgenden Verfahren implementieren und würde mich über eine Aufnahme der functionen in die Codelib freuen. Die Verfahrensbeschreibungen hatte ich leider nur noch ausgedruckt vorliegen. Hab sie mal eingescannt und angehängt.
- Pi berechnen nach Archimedes
- Pi berechnen nach Leibnitz' unendlicher Reihe
- Pi berechnen nach der Monte-Carlo-Methode
Pi berechnen nach Archimedes
Delphi-Quellcode:
function PiArchimedes(Schritte:integer):extended;
var
anzahl,i : integer;
s,x,y : extended;
begin
anzahl := 2;
s := sqrt(2);
for i := 1 to schritte do
begin
anzahl := anzahl * 2;
x := sqrt(1-(1/2*s)*(1/2*s));
y := 1-x;
s := sqrt((1/2*s)*(1/2*s)+y*y);
end;
result := s * anzahl;
end;
Pi berechnen nach Leibnitz' unendlicher Reihe
Delphi-Quellcode:
function PiUnendlicheReihe(Summandenzahl : integer):extended;
var
i, summand : integer;
begin
summand := 1;
result := 0;
for i:=1 to summandenzahl do
begin
result := result + (1/summand);
if (1-summand) < 1 then summand := -1 * (summand+2)
else summand := -1 * (summand-2);
end;
result := result * 4;
end;
Pi berechnen nach dem MonteCarlo-Verfahren
Delphi-Quellcode:
function PiMonteCarlo(Tropfen: LongWord):extended;
var
i : LongWord;
x,y : extended;
begin
Randomize;
Result := 0.0;
for i := Tropfen-1 downto 0 do
begin
x := random;
y := random;
if ((x*x+y*y) < 1) then Result := Result + 1;
end;
Result := (4*Result) / Tropfen;
end;
Edi11: thx@Binärbaum für die Optimierung der Monte-Carlo-Funktion
Edit2: thx@Binärbaum für weitere Optimierung von Monte-Carlo
Edit3: Hab das Archimedes-Beispiel gezippt, wird leider nur unwesentlich kleiner
Sorry an die Leute mit Modem/ISDN!
[edit=flomei] Anmerkung zu den obigen Kommentaren: Binärbaum hatte kleinere Fehler gefunden, bzw. Optimierungen an der Geschwindigkeit vorgenommen. Dafür nochmal ein Dankeschön!
Anhänge hinsichtlich ihrer Größe "optimiert", verschoben. Mfg, flomei[/edit]
[edit=Matze]Code formatiert. Mfg, Matze[/edit]