PHP - Ist rand (1,1000) = 1000 so wahrscheinlich wie rand (1,1000) = rand (1,1000)?

7

Ist PHP so implementiert, dass Zufallszahlen generiert werden?

Sagen wir, ich möchte ein Ja oder Nein berechnen. Jedes Mal wenn ich einen bestimmten Wahrscheinlichkeitsprozentsatz habe (sagen wir: 0,05% für dieses Beispiel).

Ich mache:

%Vor%

Gibt es bei beiden Optionen dieselben Ergebnisse?

    
Ropstah 16.08.2009, 15:13
quelle

7 Antworten

11

Lassen Sie die Daten für sich selbst sprechen.

Code

%Vor%

Testlauf

%Vor%

Angesichts der obigen Ergebnisse würde ich sagen, dass beide Optionen für alle praktischen Zwecke gleichwertig sind und in beiden Fällen das erwartete Ergebnis von 1/1000 ergeben.

    
Vinko Vrsalovic 16.08.2009, 15:26
quelle
8

Ja, rand (1,1000) = 1000 ist genauso wahrscheinlich wie rand (1,1000) = rand (1,1000).

Stellen Sie sich vor, Sie rollen zwei Würfel. Nachdem Sie den ersten gewürfelt haben, wie hoch ist die Wahrscheinlichkeit, dass der zweite beim ersten Wurf gleich dem ersten ist? 1/6.

Schreiben Sie nun eine Zahl zwischen 1 und 6 und würfeln. Wie groß ist die Wahrscheinlichkeit, dass der Würfel dem entspricht, was Sie gerade geschrieben haben? 1/6.

    
Kasper Marstal 16.08.2009 15:29
quelle
3

WENN der Zufallszahlengenerator wirklich zufällig ist, erzeugen beide Ansätze das gleiche Ergebnis. Computer-Zufallszahlengeneratoren sind jedoch nicht perfekt. Ich bezweifle, dass die Fehler ausreichen, aber der einzige Weg, um sicher zu sein, ist es zu versuchen - einen Test so lange wie möglich zu machen und zu sehen, ob es eine Abweichung von dem gibt, was es sein sollte. Sie werden mindestens Millionen von Zufallszahlen benötigen.

    
Loren Pechtel 16.08.2009 15:26
quelle
2

Dies geht nicht direkt auf Ihre Frage ein, aber Sie sollten stattdessen mt_rand () betrachten. Die PHP-Dokumentation besagt:

  

Viele Zufallszahlengeneratoren von älteren   libcs ​​sind zweifelhaft oder unbekannt   Eigenschaften und sind langsam. Durch   Standardmäßig verwendet PHP die libc random   Zahlengenerator mit dem rand ()   Funktion. Die Funktion mt_rand () ist a   Drop-In-Ersatz dafür. Es benutzt   ein Zufallszahlengenerator mit bekannten   Eigenschaften mit dem »Mersenne   Twister, der zufällig erzeugt   Zahlen viermal schneller als was   die durchschnittliche libc rand () bietet.

Von Ссылка .

    
Matthew Nizol 16.08.2009 15:29
quelle
1

Wie die meisten Zufallsgeneratoren funktionieren, ist die Ausgabe nicht wirklich zufällig, sondern basiert auf einem Algorithmus, der die zurückgegebenen Werte zufällig und verteilt erscheinen lassen sollte. Davon ausgehend ist die tatsächliche Wahrscheinlichkeit, dass Sie tatsächlich zweimal hintereinander die gleiche Zahl erhalten, noch geringer als in der realen Welt, wenn Sie zwei völlig unabhängige "Zufallsgeneratoren" hätten.

Bearbeiten : Nachdem ich gesagt habe, dass ich keinerlei Insider-Informationen darüber habe, wie der Standard-Zufallsgenerator in PHP funktioniert.

    
Fredrik 16.08.2009 15:18
quelle
0

Option 1 ist garantiert korrekt.

Ich glaube nicht, dass ich am Tag genügend Wahrscheinlichkeit und Statistiken gelernt habe, um zu sagen, ob Option 2 richtig ist.

Ich habe jedoch gelernt, dass man NIEMALS dem Zufallsgenerator einer anderen Person vertrauen sollte, ohne Testprogramme darauf laufen zu lassen, um eine Vorstellung davon zu bekommen, wie zufällig es wirklich ist.

In Ihrem Fall würde ich mit beiden Optionen ein paar Millionen Testfälle laufen lassen und sehen, ob Option 2 ähnliche Statistiken wie Option 1 ergab.

    
John R. Strohm 16.08.2009 15:20
quelle
-3

In der Theorie, ja, die beiden Ausdrücke haben genau die gleiche Wahr- scheinlichkeit, wahr zu sein. Das geht davon aus, dass der Zufallszahlengenerator von PHP tatsächlich zufällig ist - wenn nicht, ist der eine wahrscheinlicher als der andere.

Der beste Ansatz wäre, ein Experiment (Tausende von Iterationen) auszuführen und zu sehen, was passiert.

    
Andrew Medico 16.08.2009 15:23
quelle

Tags und Links