Heim >Backend-Entwicklung >C++ >Warum wiederholen sich Zufallszahlen in Schleifeniterationen?

Warum wiederholen sich Zufallszahlen in Schleifeniterationen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 01:00:02872Durchsuche

Why are Random Numbers Repeating in Loop Iterations?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn