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?
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.
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.
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.
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 Ссылка .
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.
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.
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.