AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Monte Carlo trifft PI

Ein Thema von Delphi-Padawan · begonnen am 21. Jan 2005 · letzter Beitrag vom 24. Jan 2005
 
Tortus

Registriert seit: 15. Nov 2003
Ort: Gescher
47 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Monte Carlo trifft PI

  Alt 24. Jan 2005, 14:22
Zitat von Nicolai1605:
Zitat von Jelly:
Zitat von Nicolai1605:
Aber wenn die Punkte gegen unendlich laufen
Hast du denn auch unendlich Speicher um dein Schachbrett im Speicher zu halten ?
?

Erlär doch mal, warum meine Annahme falsch ist. Wenn ich das oben genannte Beispiel durchrechnen lasse, dann komme ich wirklich nur auf den Wert, der auch bei den Pixeln rauskommt. egal wie viele Millionen mal ich da Punkte raufmache...
WO liegt denn da mein Denkfehler?
Ich glaube, deine Lösung ist auch richtig.
Dein Denkfehler (und gleichzeitig der Vorteil der Monte-Carlo-Methode) besteht darin, das bei deiner Pixelbasierenden Lösung das Canvas seeehr groß sein müsste, um ein brauchbares ergebnis zu liefern, da ein Pixel ja bekanntlich entweder schwarz oder weiß ist, aber nicht halb schwarz, halb weiß oder so.
Bei der Monte-Carlo-Methode hingegen kann man Dezimalzahlen einsetzen, die die Ergebnisse des Zufallszahlengenerators sind.

/E: Herrlich, bin ich wieder zu langsam gewesen, und ich glaube sogar am Thema vorbei.

Dafür gibts hier jetzt mal eine ganz einfache Übersetzung des Vorschlags von Wikipedia zur Monte-Carlo Methode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  tropfenzahl,
  innerhalb,
  gesamt: Integer;
  dotx,
  doty,
  piwert: Extended;
begin
  tropfenzahl := StrToInt(Edit1.Text);
  innerhalb := 0;
  gesamt := tropfenzahl;
  Progressbar1.Max := tropfenzahl;
  while(tropfenzahl>0) do
  begin
    Randomize;
    dotx := 2 * Random-1;
    doty := 2 * Random-1;
    if(Sqrt(dotx*dotx + doty*doty) <= 1) then
    begin
      innerhalb := innerhalb +1;
    end;
    tropfenzahl := tropfenzahl -1;
    Progressbar1.Position := Gesamt - tropfenzahl;
    Application.ProcessMessages;
  end;
  Edit2.Text := FloatToStr(4*innerhalb/gesamt);
end;
Wie gesagt, einfach aus meinem Testprogrämmle kopiert, und ohne weiteres Tuning
Thorsten Lanfer
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz