gleichverteilte Zufallszahlen erzeugen

Lloyd

Erfahrenes Mitglied
Hiho,

ich bin gerade am Testen von Zufallszahlen.
Leider hat ja Flash keine Funktion um Integer von i...n zu erzeugen.
Um von 0 bis 5 Zahlen zu erzeugen hab ich diese Zeile genommen.
PHP:
n=Math.round(Math.random()*5);
Ich finde es umständlich zwei Math-funktionen zu nutzen und sicher auch nicht gut für die Performance. Gibt es denn eine einfachere Methode?
Nun hab ich bemerkt, dass nur die Zahlen 1 bis 4 gleichverteilt (was wünschenswert ist)sind. Die Ränder kömmen immer zu kurz. Die Armen.
Klar könnte man wenn man Zahlen von 1 bis 4 möchte, 6 Zahlen erzeugen lassen (0..5),
aber sauber ist das auch nicht.
Habt ihr Anregungen?
btw: Über random() wollt ich nicht reden, denn das ist "deprecated".
 
Zuletzt bearbeitet:
Flash-technisch kenne ich mich da jetzt nicht aus, aber als kleine Frage/Anmerkung:
Kann es sein, dass die generierten Zahlen auch der Gauss'schen Normalverteilung unterliegen?
Wenn du sagst die Ränder kommen weniger häufig, klingt das ganz danach...
 
0 - 0,49 = 0
0,5 - 1,49 = 1
1,5 - 2,49 = 2
2,5 - 3,49 = 3
3,5 - 4,49 = 4
4,5 - 5 = 5

Liegt irgendwie in der Natur der Sache, dass die erste und die letzte Zahl nicht den gleichen Wahrscheinlichkeiten unterliegen, wie die Zahlen innerhalb des Feldes, und deswegen nicht gleichverteilt sind.

Aber danke, dass hat mich grad auf was hingewiesen, was ich in meinem Zufallsgenerator vergessen hatte. Denk nicht, dass die Benutzung von Math.round() und Math.random() auf die Performance haut.

Zur Lösung könnte man evtl. den Generator mit einer Zahl eins höher multiplizieren und dann bei Erreichen dieser Zahl, die Null als Zufallszahl deklarieren. DAnn wäre die Wahrscheinlichkeit für alle gleich.

Für saubere Methoden hätte ich aber auch ein offenes Ohr.
 
Hi,

ich mache das so:
PHP:
zahl = int(Math.random() * 6);
int() schneidet natürlich den Nachkommateil einfach ab, von daher sollten alle Zahlen gleichmässig verteilt sein (0.000000001 gibt 0, 5.999999998 gibt 5).

Gruß
.
 
Zuletzt bearbeitet:
@Johannes Postler: Mit der gausschen Normalverteilung hat das nichts zu tun.
Da nur die "Ränder" weniger abbekommen. Eine Normalverteilung wäre sogar der Horror für alle Zufallsgeneratoren. Aber in einigen Programmiersprachen gibt es glaub ich auch dafür eine Funktion. Nur gibt es für normalverteilte Zufallszahlen viel weniger Anwendungen.
@Datic: Das nenn ich sauber. Über die Fuktion int(); bin ich noch gar nicht gestolpert.
Es werden alle generierten Zahlen verwendet und sie sind gleichverteilt.
Was du allerdings damit meist weiss ich nicht so recht:
Zitat: (0.000000001 gibt 0, 5.999999998 gibt 4).
 

Neue Beiträge

Zurück