Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Algorithmen (https://www.delphipraxis.net/28-library-algorithmen/)
-   -   Delphi Ergänzung zur Approximation von Pi (https://www.delphipraxis.net/43148-ergaenzung-zur-approximation-von-pi.html)

gordon freeman 29. Mär 2005 23:54


Ergänzung zur Approximation von Pi
 
Liste der Anhänge anzeigen (Anzahl: 3)
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 :sad: 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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf