2016-04-29 6 views
0

ich einen Zufallszahlengenerator wollte einen Münzwurf zu simulieren und hier ist, was ichMünzwurf Zufallszahlen scheint nicht genau zufällig

public class CoinToss 
{ 
    public static void main(String args[]) 
    { 
     int num=(int)(1000*Math.random()); 
     if(num<500) 
      System.out.println("H"); 
     else 
      System.out.println("T"); 
    } 
} 

taten Die Ergebnisse wurden entmutigend, wie ich 16 Köpfe, und 4 Schwänze in 20 läuft. Das erscheint nicht erscheinen zufällig zu sein. Es ist möglich, aber ich möchte eine allgemeine Meinung, wenn das Programm korrekt ist? Fehle ich etwas mathematisch?

+0

Versuchen Sie es noch einige Male ausgeführt wird. Sie können bessere Ergebnisse erzielen. – Hackerdarshi

+1

20 Proben ist mathematisch bedeutungslos, Tablett wieder mit einer größeren Probe (mindestens 10k) – Preuk

+1

Ja, @Preuk hat Recht. Ich habe gerade Ihr Beispiel mit max_int durchlaufen und hier ist das Ergebnis: H: 1073754033, T: 1073729614 – Christoph

Antwort

0

Modifiziert Ihren Code ein wenig und es scheint zufällig genug zu sein.

Code:

int h = 0; 
    int t = 0; 
    for (int i = 0; i < 1000; i++) { 
     int num = (int) (1000 * Math.random()); 
     if (num < 500) { 
      h++; 

     } else { 
      t++; 

     } 
    } 
    System.out.println("T:" + t); 
    System.out.println("H:" + h); 

Ausgang:

T:506 
H:494 

Ich denke, das die Sache mit Zufälligkeit ist ^^

0

Code scheint korrekt zu sein, obwohl man es könnte implementieren einfacher:

Random r = new Random(); 
int num = r.nextInt(2); 
if (num == 0) 
    System.out.println("H"); 
else 
    System.out.println("T"); 

Random#nextInt(int i) gibt eine Zufallszahl zwischen 0 und i-1

+1

Ihr Code scheint korrekt zu sein, obwohl Sie es einfacher implementieren könnten: 'r.nextBoolean();';) – Kayaman

0

Sie müssen viel mehr Eingänge, um die gleiche Anzahl von jedem zu erhalten . Für eine so kleine Anzahl von Ausgaben werden Sie sie manchmal in Bezug auf Zahlen nahe beieinander sehen, manchmal wird eine Seite viel mehr als andere "zeigen". Eigentlich ist die Wahrscheinlichkeit, 4 Tails und 16 Köpfe zu haben, 0.462%, was etwas "realistisch" zu passieren ist ... Versuchen Sie, mit ihm mehr mit höherer Anzahl von Läufen zu spielen und zu sehen, wie es sich verhält.

Und btw über diesen Eingang denken:

6 6 6 6 6 6 6 6 6 6 

Hat scheint nicht zufällig, nicht wahr? Aber es existiert in Dezimal Nummer π irgendwann, so ist es ein Teil der zufälligen Reihe. Es ist nur eine Frage der Seriengröße, also müssen Sie auf diese Weise denken, wenn Sie mit Zufallszahlen arbeiten. Denken Sie eher an Zufallsgenerator als an Ergebnisse. Sie verwenden korrekte Funktion, da es auf System.nanoTime() basiert, also Generator ist richtig, aber Ihr Ergebnis ist zu klein.

1

20 Läufe sind nicht groß genug, um die Stichprobengröße zu bestimmen. Denken Sie mal so: Wenn Sie 4 Läufe machen und 4 Köpfe haben, würden Sie denken: "Wow, das ist überhaupt nicht zufällig." Aber in der Tat, wenn Sie 4 Münzen genommen und 16 Mal umgedreht haben, würden Sie erwarten, alle 4 Köpfe mindestens einmal zu bekommen. Wenn Sie also eine kleine Anzahl von Läufen durchführen und Ergebnisse erhalten, die nicht gleichmäßig zwischen Kopf und Zahl aufgeteilt sind, bedeutet das nicht, dass es nicht zufällig ist.

Oder sehen Sie es sich so an: Wenn Sie einen Code geschrieben haben, der nur "Heads", dann "Tails" und dann "Heads" usw. enthält, dann erhalten Sie genau die Hälfte und den halben Schwanz. Aber das ist überhaupt nicht zufällig! Es ist nur ein sich wiederholendes Muster.

Also die Moral der Geschichte ist nicht zu überraschen, wenn zufällige Ergebnisse über kurze Läufe ungleich aussehen. Versuchen Sie, Ihren Code neu zu schreiben, so dass er zählt, wie viele Köpfe und wie viele Schwänze, und lassen Sie es etwa eine Million oder so umdrehen, und sehen, ob Sie nicht etwa 500.000 jeder bekommen. Es sollte ein wenig mehr oder weniger sein, weil dir Zufall nicht genau sagt, aber es sollte näher sein.

0

A Pseudo-Zufallszahlengenerator (PRNG), auch als eine deterministischen Zufallsbitgenerator (DRBG) bekannt, ist ein Algorithmus, um eine Folge von Zahlen, der Eigenschaften annähern, die Eigenschaften von Sequenzen von Zufallszahlen zu erzeugen.

Der PRNG-erzeugten Sequenz nicht wirklich zufällig ist, da es vollständig von einem relativ kleinen Satz von Anfangswerten bestimmt wird, bezeichnet den Samen des PRNG

Obwohl Sequenzen, die näher an wirklich zufällig sind, können

erzeugt werden

Wer arithmetische Methoden zur Erzeugung von Zufallszahlen in Betracht zieht, ist natürlich in einem Zustand der Sünde. John von Neumann