Klassen Math && Random: wie zufällig sind Zufallszahlen?

Javinner

Top Contributor
Habe ein Lotto-Programm geschrieben, welches unter anderem die Häufigkeit der einzeln gezogenen Zahlen in Prozent aufzeigen soll. Jetzt ist mir aufgefallen, dass die gezogenen Zahlen sich in Häufigkeit nur wenig unterscheiden. Ich habe den Zufallgenerator mal mit Random, mal mit Math. ausgeben lassen, jedoch ist kein merkbarer Unterschied sichtbar.
Auch nach einer Wiederholungsrate von 100000000 ist der Unterschied recht gering.
Warum ist es so?

Java:
/** Anzahl Testlaeufe: 100000001 */
Die Zahl: 1 wurde 12247584 Mal gezogen, in Prozent 2,04126
Die Zahl: 2 wurde 12245697 Mal gezogen, in Prozent 2,04095
Die Zahl: 3 wurde 12250036 Mal gezogen, in Prozent 2,04167
Die Zahl: 4 wurde 12246695 Mal gezogen, in Prozent 2,04112
Die Zahl: 5 wurde 12245296 Mal gezogen, in Prozent 2,04088
...
Die Zahl: 46 wurde 12244428 Mal gezogen, in Prozent 2,04074
Die Zahl: 47 wurde 12243581 Mal gezogen, in Prozent 2,04060
Die Zahl: 48 wurde 12250149 Mal gezogen, in Prozent 2,04169
Die Zahl: 49 wurde 12250198 Mal gezogen, in Prozent 2,04170
 

Javinner

Top Contributor
Dabei fällt mir gerade ein: unterscheidet sich die Zufallsfunktion von der Zufallsfunktion des Lottospiels? Hier werden zufällig Zahlen gewählt, dort zufällig die Kugeln aufgesammelt.. Ist es nicht das Selbe, oder gibt es da etwas, was ich zum Thema noch nicht weiß?
 

Sasuke

Mitglied
Man muss dazu deutlich sagen dass die Zahlen, welche von Random generiert werden bis zu einem gewissen Grad deterministisch sind. Um sicher zu gehen solltest du dir das Konzept von SecureRandoms ansehen.
 

Javinner

Top Contributor
Man muss dazu deutlich sagen dass die Zahlen, welche von Random generiert werden bis zu einem gewissen Grad deterministisch sind. Um sicher zu gehen solltest du dir das Konzept von SecureRandoms ansehen.
Deterministisch: und wieder was gelernt!
In der Tat gibt es da mehr Differenz untereinander!, und die SecureRandom.nextInt(int numBits) liefert hier die größten Unterschiede von allen hier bereits erwähnten Methoden. Wobei anzumerken wäre, dass
dies bei wachsender Testlaufanzahl nicht mehr so deutlich auftritt.


edit: beim zweiten Blick scheint es jedoch nicht eindeutig. Auch Random liefert
vergleichbar große Differenzen, wenn die Testlaufanzahl gering ist.


Java:
/** Testlaeufe: 1000001 */
/** SecureRandom */
Die Zahl: 1 wurde 122707 Mal gezogen, in Prozent 2,04512
Die Zahl: 2 wurde 122874 Mal gezogen, in Prozent 2,04790
Die Zahl: 3 wurde 122501 Mal gezogen, in Prozent 2,04168
Die Zahl: 4 wurde 122256 Mal gezogen, in Prozent 2,03760
...
Die Zahl: 12 wurde 122074 Mal gezogen, in Prozent 2,03457
...
Die Zahl: 33 wurde 123036 Mal gezogen, in Prozent 2,05060
Die Zahl: 34 wurde 122180 Mal gezogen, in Prozent 2,03633
...
Die Zahl: 45 wurde 122062 Mal gezogen, in Prozent 2,03437
Die Zahl: 46 wurde 122141 Mal gezogen, in Prozent 2,03568
Die Zahl: 47 wurde 122109 Mal gezogen, in Prozent 2,03515
Die Zahl: 48 wurde 122412 Mal gezogen, in Prozent 2,04020
Die Zahl: 49 wurde 122334 Mal gezogen, in Prozent 2,03890

Java:
/** Testlaeufe: 1001 */
Die Zahl: 1 wurde 106 Mal gezogen, in Prozent 1,76667
Die Zahl: 2 wurde 132 Mal gezogen, in Prozent 2,20000
Die Zahl: 3 wurde 128 Mal gezogen, in Prozent 2,13333
Die Zahl: 4 wurde 116 Mal gezogen, in Prozent 1,93333
Die Zahl: 5 wurde 122 Mal gezogen, in Prozent 2,03333
...
Die Zahl: 39 wurde 90 Mal gezogen, in Prozent 1,50000
...
Die Zahl: 48 wurde 134 Mal gezogen, in Prozent 2,23333
Die Zahl: 49 wurde 124 Mal gezogen, in Prozent 2,06667
Java:
/** Testlaeufe: 1001 */
/** Random */
...
Die Zahl: 15 wurde 150 Mal gezogen, in Prozent 2,50000
...
Die Zahl: 21 wurde 99 Mal gezogen, in Prozent 1,65000
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Ist doch einfachste Stochastik. Bei einer Normalverteilung wie eben den Lottozahlen wird bei undendlich häufigem Ziehen jede Zahl genau gleich oft gezogen werden. Ist wie beim Würfel. Wenn du unendlich oft würfestl wirt du nachher jede Zahl gleich oft gewürfelt haben. Von daher ist das Ergebnis doch genau wie erwartet.
 
X

Xyz1

Gast
@Flown hat schon alles gesagt. Math.random und Random ist das gleiche. Wenn die Zahlen nach x Ziehungen nicht gleich verteilt wären, dann "taugt" der PRNG nichts. Ich denke, hier liegt ein Verständnisproblem vor. Die RN sind auch NICHT "teilweise" deterministisch, sondern "vollständig" deterministisch. Und zu den Lottoziehungen: Es gab noch nicht "100000000" Ziehungen, dementsprechend sind die Zahlen auch "noch nicht gleich verteilt". Du wirst mir glaube ich zustimmen, dass bei drei-mal würfeln eine Zahl 100 % unterschiedlich oft vorkommen kann als eine andere.
 

Javinner

Top Contributor
Ich habe ein kleines Testversuch gemach mit erwartetem Ergebnis. Dabei habe ich den Monitor mitlaufen lassen, dies wirft fragen auf.
- Warum dauert SecureRandom wesentlich länger als Random?
- Weshalb werden hier verschiedene Teile des Prozessors beansprucht? (oder passiert es automatisch?)

Falls es wichtig ist: hier werkelt ein i5 3750 Intel

Stochastik ist zwar ein Begriff, jedoch ist es sehr lange her, kaum noch Erinnerung übrig.
Werde mich wohl wieder reinlesen müssen, danke für die Hilfe.

Java:
/** Testlaeufe: 100000001 */
/** Random */
Kleinste Zahl: 2,03989, größte Zahl: 2,04179 //Angabe in Prozent
BUILD SUCCESSFUL (total time: 35 seconds)

Java:
/** Testlaeufe: 100000001 */
/** SecureRandom */
Kleinste Zahl: 2,03931, größte Zahl: 2,04213 //Angabe in Prozent
BUILD SUCCESSFUL (total time: 13 minutes 13 seconds)
 

Anhänge

  • Random.PNG
    Random.PNG
    151,1 KB · Aufrufe: 39
  • SecureRandom.PNG
    SecureRandom.PNG
    219,1 KB · Aufrufe: 47

JCODA

Top Contributor
Wobei anzumerken wäre, dass
dies bei wachsender Testlaufanzahl nicht mehr so deutlich auftritt.

edit: beim zweiten Blick scheint es jedoch nicht eindeutig. Auch Random liefert
vergleichbar große Differenzen, wenn die Testlaufanzahl gering ist.
Wie bereits von Thallius erwähnt, konvergieren die relativen Häufigkeiten, bei steigender Versuchsanzahl gegen die theoretischen Wahrscheinlichkeiten, man nennt dies übrigens das https://de.wikipedia.org/wiki/Gesetz_der_großen_Zahlen .
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Math.Random Java Basics - Anfänger-Themen 9
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
alialhajhossein math.random Java Basics - Anfänger-Themen 3
D Wahrscheinlichkeiten mit Math.random() Methode Java Basics - Anfänger-Themen 1
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
B Math.random mit Boolean array? Java Basics - Anfänger-Themen 17
I math.random Grenzwerte Java Basics - Anfänger-Themen 2
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
Thorwine Erste Schritte Wuerfelspiel mit Math.random() Java Basics - Anfänger-Themen 10
S Math.random() Zufall ? Java Basics - Anfänger-Themen 2
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
X Problem mit Math.random() Java Basics - Anfänger-Themen 2
T Random vs. Math.random() Java Basics - Anfänger-Themen 2
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
T Zufallserzeugung mit math.random und speichern in array Java Basics - Anfänger-Themen 29
J Woher kommt das Objekt "Math" bei Math.random(); ? Java Basics - Anfänger-Themen 3
P Typecasting für Ganzzahlige Zufallszahl (Math.random) Java Basics - Anfänger-Themen 2
J Bedeutung von math.random() math.round() Java Basics - Anfänger-Themen 7
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
R (Math.random()*49) zahl darf aber nur einmal gezogen werden Java Basics - Anfänger-Themen 11
C math.random() Java Basics - Anfänger-Themen 9
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
B Math.random und Strings Java Basics - Anfänger-Themen 13
Luk10 math.random() Java Basics - Anfänger-Themen 2
J Math.random() - kurze frage. Java Basics - Anfänger-Themen 20
J Math.random Java Basics - Anfänger-Themen 12
T Math.random() Zahlen von 25 - 50. Wie? Java Basics - Anfänger-Themen 7
H Brauche ganz dringend HILFEEE! Math random Java Basics - Anfänger-Themen 19
T Math.Random negativer Intervall Java Basics - Anfänger-Themen 2
B Zahlenwiederholung bei Math.random verhindern Java Basics - Anfänger-Themen 4
J Zufallszahl ohne Math.random Java Basics - Anfänger-Themen 4
A Probleme mit Math.random Java Basics - Anfänger-Themen 4
P 2n Potenzieren ohne Math.pow oder pow Java Basics - Anfänger-Themen 8
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
V Erste Schritte Berechnen von Sinus; sin(x) ohne Math.* Java Basics - Anfänger-Themen 1
B Potenzrechnung mit WindowBuilder ohne math.pow() Java Basics - Anfänger-Themen 1
B Potenzen ohne Math.pow Java Basics - Anfänger-Themen 4
N Datentypen Math.floor rundet nicht ab Java Basics - Anfänger-Themen 4
S Math.ceil für float Java Basics - Anfänger-Themen 1
M Warum ist dieses Feld der Klasse Math immutable? Java Basics - Anfänger-Themen 7
S math Methoden in Java (quadrat) Java Basics - Anfänger-Themen 7
C Erste Schritte Math.sin und Co. funktionieren nicht Java Basics - Anfänger-Themen 5
A Potenzen ohne math.pow Java Basics - Anfänger-Themen 1
L Klassen Point- und Math-Klasse Java Basics - Anfänger-Themen 3
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
J java.lang.math asin() Java Basics - Anfänger-Themen 18
L Math.floor und double Array Java Basics - Anfänger-Themen 13
B Math.acos() Java Basics - Anfänger-Themen 4
N Methoden Probleme mit Math.cos Java Basics - Anfänger-Themen 3
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
Luk10 3. Wurzel mit Math.pow(x, (1/3)) Java Basics - Anfänger-Themen 2
J Datentypen Math.sqrt() immer NaN Java Basics - Anfänger-Themen 8
T Ungenaue Werte bei Math.atan Java Basics - Anfänger-Themen 10
M Math.round Java Basics - Anfänger-Themen 32
M Math Class Java Basics - Anfänger-Themen 2
B Math.abs Java Basics - Anfänger-Themen 4
Haave Postfix-Rechner: mehrere math. Operationen nacheinander ausführen Java Basics - Anfänger-Themen 8
T Math.signum Java Basics - Anfänger-Themen 2
N Math + Variablen + Ausgabe Java Basics - Anfänger-Themen 2
B math. Operationen + Ausgabe Fehler :S Java Basics - Anfänger-Themen 5
C math.pow funktionert nicht richtig oder garnicht Java Basics - Anfänger-Themen 4
G Quelltext von Methoden in der Klasse Math Java Basics - Anfänger-Themen 11
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
G Klasse Math Java Basics - Anfänger-Themen 2
T Math.tan() Problem Java Basics - Anfänger-Themen 2
M Math.sin in Radiant in Java? Java Basics - Anfänger-Themen 5
C Math-Funktion Java Basics - Anfänger-Themen 10
S Math.tan Problem rechnet falsches Ergebniss aus. Java Basics - Anfänger-Themen 3
F Math.abs() Java Basics - Anfänger-Themen 3
M Probleme mit Math.round() Java Basics - Anfänger-Themen 5
P Math.abs, praktische Anwendung? Java Basics - Anfänger-Themen 4
M Eclipse: Fehler bei: import java.lang.math Java Basics - Anfänger-Themen 7
D math und abs() Java Basics - Anfänger-Themen 14
E Problem mit Methode Math.max Java Basics - Anfänger-Themen 2
G Math.cos Java Basics - Anfänger-Themen 4
S Math-Befehl für Quadrieren! Java Basics - Anfänger-Themen 6
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
laxla123 Bedeutung int random Java Basics - Anfänger-Themen 3
monsterherz Arbeiten mit Random Java Basics - Anfänger-Themen 12
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
K Problem mit "Random" Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Random(x,y,z) Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
C Arraywerte random vertauschen Java Basics - Anfänger-Themen 2
SchmidiMC Methoden Random in Methode neu generieren lassen Java Basics - Anfänger-Themen 1
J Operatoren Random wird nur einmal erstellt und dann immer verwendet Java Basics - Anfänger-Themen 2
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
D Erste Schritte Random Java Basics - Anfänger-Themen 79
Z Problem mit "Random" in Java Java Basics - Anfänger-Themen 12
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben