ループ反復内の同じ乱数
15 回実行されるループでは、各反復で dh.setDoors() を呼び出しました。この関数内で、srand(time(0)) が呼び出され、擬似乱数の生成が開始されます。ただし、ループ内で後続の rand() を呼び出すと、15 回の反復すべてを通じて carSetter と Decider の値が一定になります。
この動作は、srand(time(0)) が乱数ジェネレーターのシードを設定するために発生します。現在の時間で。ループは高速に実行されるため、time(0) は毎回同じ値を返し、同じ一連の擬似乱数が生成されます。
この問題を解決するには、srand(time(0) のみを呼び出すことをお勧めします。 )) プログラムの開始時に 1 回、通常は次のようなプロセスに従います。
<code class="c++">srand(time(0)); for (int i = 0; i < 15; i++) { carSetter = rand() % 3 + 1; decider = rand() % 2 + 1; }</code>
この初期化を 1 回だけ実行することで、擬似乱数ジェネレーターは、次の反復ごとに一意の数値シーケンスを生成します。ループを実行し、carSetter と Decider の値の予想される変動を生成します。
以上がループ反復内で乱数が同じになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。