PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : javascript: Zufallszahlen



BlueJay
20-01-2006, 13:03
Hallo Leute,

den Verdacht hatte ich schon länger, aber durch einen Test ist es mir heute so richtig aufgefallen:
Mit dem Zufallsgenerator kann man nur "Kleinvieh" - Zufallszahlen erzeugen.

Ich habe hier aber eine Anwendung, bei der das nicht funktioklappert.

Um an bestimmte Werte zu kommen, für die es keine Funktion gibt, setze ich Random-Zahlen ein und berechne die Abweichung von geschätzten Parametern und einer vorgegebene Kurve (Fit Monte Carlo-Methode).
Was auf einem Großrechner und auf dem Amiga vollen Erfolg brachte, geht hier in die Hose, und zwar, weil sich die Zufallszahlen allzugerne wiederholen, andere wiederum nicht auftauchen (Test mit 20x20er Matrix, etliche weisse Bereiche).

Mit C++ gibt es das Problem auch, aber ist nicht ganz so auffällig (Test mit 100x100 Matrix)

Irgendwelche Ideen, wie ich an bessere Zufallszahlen komme?

so long,
BlueJay

BlueJay
21-01-2006, 13:59
Hm, das mit dem Test war wohl zu kurz geraten.

Ziel dieses Programmes war es, *alle* möglichen Zahlen in zufälliger Reihenfolge zwischen 5 und 12x zu treffen, dann wäre der Generator für die Monte Carlo-Methode geeignet.
Nicht getroffene Bereiche sind weiss, je mehr Treffer eine Zelle bekommt, desto dunkler wird sie (16 Stufen). Erwünscht ist ein mittelgraues Moiree.

Wie das Bild nach über 2 Stunden Laufzeit zeigt, ist der Zufallsgenerator mehr als lausig, es gibt Hot-Spots und Bereiche, die nicht angetastet werden.

Zu sehen hier:
http://www.ujaswelt.de/blogbilder/rand_intern.jpg

Turbohummel
21-01-2006, 15:09
Vielleicht löst die Kombination von 2 Zufallszahlen das Problem?

BlueJay
22-01-2006, 09:44
In punkto c++ ist der Pferdefuß die Tatsache, dass es bei srand wohl nur alle Sekunde einen neuen seed gibt. Die ganze Loop samt Validieren ist aber deutlich kürzer, 95% Rechenzeit gehen wegen doppelter Parameter den Bach runter :(

Das mit dem Doppel-rand werde ich mal checken.

Wäre ja schon froh, wenn das Feld wenigstens in 1 Sprache einigermaßen gleichmäßig angesprochen würde.

so long,
BlueJay

bischi
22-01-2006, 10:07
Pseudozufallsgeneratoren kannst du selbst programmieren - wenn du nen guten nimmst, kommen dabei auch vernünftige "Zufallszahlen" raus. Noch mit aktueller Millisekundenanzahl multiplizieren und fertig ists. Es gibt etliche Modelle - musst mal googeln und dir ein paar suchen. Die Implementierung ist eher einfach.

MfG Bischi

PS: http://de.wikipedia.org/wiki/Rekursiver_arithmetischer_Zufallszahlengenerator

elrond
31-01-2006, 13:06
/dev/urand liefert recht ordentliche zufallszahlen

mit


dd if=/dev/urandom bs=1c count=4

erhälst du vier zufallsbytes, die je nach gusto in zahlen zu verwandeln sind... ;)

Turbohummel
31-01-2006, 16:14
/dev/urand liefert recht ordentliche zufallszahlen

mit


dd if=/dev/urandom bs=1c count=4

erhälst du vier zufallsbytes, die je nach gusto in zahlen zu verwandeln sind... ;)

Keine Ahnung was das ist, aber sicherlich kein Javascript ;)

elrond
01-02-2006, 06:38
da hier schon immermal von c++ der rede war hab ich javascript für einen schreib-/lesefehler gehalten... :rolleyes:

BlueJay
04-02-2006, 20:07
verwendet werden soll es schon in js zum Ausprobieren online.

ich hatte nur bereits herausgefunden, dass im C++ der bessere Zufallsgenerator ist (vorgefertigte Parameter werden dann zu Demozwecken in Dateien abgelegt), aber immer noch nicht gut genug. Da "entwischen" immer noch einige Parametersätze.

Turbohummel
04-02-2006, 21:23
Also "Zufallszahlen" sollen ja zufällig sein. Da kann es keine Gleichverteilung geben. Sonst wärens ja keine Zufallszahlen.

BlueJay
04-02-2006, 22:08
Also "Zufallszahlen" sollen ja zufällig sein. Da kann es keine Gleichverteilung geben. Sonst wärens ja keine Zufallszahlen.

Soweit die (modernen) Statistikfreaks. ;)

Die altmodischen sagen: jede Zahl hat die gleiche Wahrscheinlichkeit, erwischt zu werden. Wartet man lang genug, kriegt man sie alle.
Siehe auch hier:
http://de.wikipedia.org/wiki/Verteilung_von_Zufallszahlen

Wenn nun z.B. bei großen Mengen (hier: 40 000"Schuss") 1/100 des Test-Feldes selten oder nie getroffen werden, stimmt die Voraussage aus den Stichproben nicht, damit wäre aber die Statistik ad absurdum geführt.

Turbohummel
05-02-2006, 08:41
Ok, bei 40k schüssen ist das schon merkwürdig. Wie schonmal gesagt: Versuchs mal mit der Kombination 2er Zufallszahlen.