Seite 2 von 2
Verfasst: 24.03.2006 12:58
von freedimension
Deeem2031 hat geschrieben:
...?
Dann wäre es aber langsamer als die PB-Variante - "DOTX * DOTX + DOTY * DOTY" is doch die schnellste Variante...
...ja ich weiß, der Beitrag war eh nich ernst gemeint

Ich glaube, du hast da etwas gründlich missverstanden. Die PB-Gegner die offensichtlich schlechten PB-Code geschrieben haben, sollen dass doch bitte nächstes Mal
richtig schlecht machen damit der eigene Vorsprung noch größer wird. Mein Code war für PB gedacht, damit sich so mancher Blitzmaxler der es nötig hat noch viel toller vorkommen kann

Verfasst: 24.03.2006 14:53
von Sebe
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

Verfasst: 24.03.2006 17:40
von Lebostein
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()