Sebe hat geschrieben:Danke, das war mir nicht aufgefallen. Wenn ich wieder zu Hause bin werde ich nochmal alle Source vergleichen, damit auch wirklich alles mit Rechten Dingen zugeht. Naja, am Float Handling von BMX kann ich natürlich nix ändern

Aber ich bin froh, dass ausser mir noch andere Leute den Source durchsehen. Nur so können Fehler ausgemerzt werden, also danke an dieser Stelle

Dann kannst du gleich mal die Auflösung der Zufallsfunktion von bisher 100 auf 10000 oder sogar 100000 erhöhen, damit auch ein für PI angemessener Wert rauskommt (bisher erhält man immer einen Wert um 3.07):
Code: Alles auswählen
DOTX = Random(100000) / 100000.0
DOTY = Random(100000) / 100000.0
Ansonsten wird durch das grobe Raster natürlich zu wenig Kreisfläche berechnet, als eigentlich vorhanden. Übrigens kann man sich auch die 2.0 * .. - 1.0 sparen, wozu die gut sein sollen, hab ich noch nicht verstanden.
Also so in etwa:
Code: Alles auswählen
EnableExplicit
Define.f DOTX, DOTY, PI
Define.l time1, time2
Define.q inside, drops, total
#solution = 100000
OpenConsole()
PrintN("MonteCarloPI - PureBasic")
Print("How many drops (0 - 9223372036854775807): ")
drops = ValQ(Input())
total = drops
time1 = GetTickCount_()
While drops > 0
DOTX = Random(#solution) / #solution
DOTY = Random(#solution) / #solution
If DOTX * DOTX + DOTY * DOTY <= 1.0
inside + 1
EndIf
drops - 1
Wend
time2 = GetTickCount_()
PI = 4.0 * inside / total
PrintN("PI (" + Str(total) + " drops) on float: " + StrF(PI, 18))
PrintN("Time needed: " + Str(time2 - time1) + " m/secs")
PrintN("Return to quit...")
Input()