S
volkard schrieb:
kannste mal messen, ob bei nem würfel mit einer million seiten die 0 sichtbar häufiger als die 999999 drankommt? wenn da nix schief wirkt, brauchste dir keine gedanken über nen besseren zufallszahlengenerator zu machen, dann ist deiner echt gut.
Ich habe eben ein paar Tests durchlaufen lassen. Es ist keine signifikante Abweichung festzustellen. Warum auch? (siehe auch unten)
Gregor schrieb:
Wenn die ints, die der Zufallsgenerator ausspuckt, gleichverteilt sind, dann sollte die 999999 etwas seltener vorkommen als die 0
Ich bin mir dessen bewußt! Ich denke, Du meinst folgendes Problem:
Beispiel (vereinfacht!):
Automatische Zufallszahlenerzeugung zz_10 im Bereich von 0-9 durch die Klasse Random.
Annahme: Die Wahrscheinlichkeit für jeden Wert von 0-9 ist jeweils 0,1.
Ich benötige nur Zufallszahlen zz_3 im Bereich von 0-3. Also rechne ich
zz_3 = zz_10 % 4 ;
Damit ist
zz_3 = 0 für zz_10 == {0,4,8}
zz_3 = 1 für zz_10 == {1,5,9}
zz_3 = 2 für zz_10 == {2,6}
zz_3 = 3 für zz_10 == {3,7}
Damit ergibt sich folgende Wahrscheinlichkeitsverteilung
für zz_3 == 0 0,3
für zz_3 == 1 0,3
für zz_3 == 2 0,2
für zz_3 == 3 0,2
Die Zahlen sind also nicht mehr wirklich zufällig. Es gibt es Präferenz zu den niedrigeren Zahlen!
Da allerdings die tatsächlich automatisch erzeugten Zufallszahlen (vgl. zz_10) im Bereich von Integer.MinValue (-2^31) bis Integer.MaxValue(2^31-1) und die von mir errechneten Zufallszahlen (vgl. zz_3) sehr klein bleiben, fällt die Verfälschung nicht besonders ins Gewicht.
Oder sollte ich vielleicht doch lieber die nextLong() anstatt von nextInt() benutzen? Was meint ihr?
Gregor schrieb:
(abgesehen davon, dass in dem Code da oben natürlich garkeine 0 entsteht). Das bringt das "%", das hier verwendet wird, wohl mit sich.
Um genau zu sein liegt es nicht an dem Modulo, sondern an dem +1 .
Vielen Dank!
Ciao
shoat