Heim >Backend-Entwicklung >C++ >Warum wiederholen sich Zufallszahlen in Schleifeniterationen?
Zufallszahlenwiederholung in Schleifeniterationen
Bedenken Sie das folgende Problem: innerhalb einer Schleife, die 15 Iterationen ausführt, die dh.setDoors()-Methode heißt. Innerhalb von setDoors() wird srand(time(0)) aufgerufen, um einen Startwert für die Zufallszahlengenerierung festzulegen. Anschließend werden Zufallszahlen mithilfe von Ausdrücken wie carSetter = rand()%3 1 oder Decider = rand()%2 1 generiert.
Die Überwachung der Werte von carSetter und Decider zeigt, dass sie während jeder Schleifeniteration konstant bleiben , sondern zwischen verschiedenen Schleifenläufen wechseln. Dieses Verhalten ist unerwartet, da die Schleife 15 unabhängige Iterationen umfasst, was darauf hindeutet, dass jeder Zufallswert variieren sollte.
Untersuchung der Ursache
Das Problem ergibt sich aus der Platzierung von srand( time(0)) zu Beginn jeder Iteration. Durch das Zurücksetzen des Startwerts bei jeder Schleife wird die Folge von Pseudozufallszahlen effektiv durch den konstanten Wert von time(0) innerhalb der Iteration fixiert. Da die Zeit (0) während der gesamten Schleife gleich bleibt, wird dieselbe Zufallszahlenfolge generiert.
Behebung des Problems
Um dieses Problem zu beheben, wird empfohlen, Folgendes zu tun Initialisieren Sie den Zufallszahlengenerator nur einmal, am Anfang des Programms und nicht innerhalb jeder Schleifeniteration. Dadurch wird sichergestellt, dass für jede Schleifeniteration unterschiedliche Zufallszahlensequenzen verwendet werden.
Die überarbeitete Implementierung würde wie folgt aussehen:
srand(time(0)); // Call srand() once at the start of the program while (...) { x = rand(); y = rand(); }
Mit dieser Änderung variieren die Werte von x und y zwischen Schleifeniterationen, die das gewünschte Verhalten verschiedener Zufallszahlenfolgen erzeugen.
Das obige ist der detaillierte Inhalt vonWarum wiederholen sich Zufallszahlen in Schleifeniterationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!