ホームページ >バックエンド開発 >C++ >ループ反復で乱数が繰り返されるのはなぜですか?

ループ反復で乱数が繰り返されるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 01:00:02873ブラウズ

Why are Random Numbers Repeating in Loop Iterations?

ループ反復における乱数の繰り返し

次の問題を考えてみましょう: 15 回の反復を実行するループ内で、dh.setDoors() メソッドと呼ばれます。 setDoors() 内で、srand(time(0)) が呼び出され、乱数生成のシードが設定されます。その後、carSetter = rand()%3 1 または Decider = rand()%2 1 などの式を使用して乱数が生成されます。

carSetter と Decider の値を監視すると、各ループ反復を通じて値が一定であることがわかります。ただし、異なるループ実行間で変更します。ループには 15 回の独立した反復が含まれているため、この動作は予期せぬものであり、各ランダム値が変化するはずであることを示唆しています。

原因の調査

問題は srand( time(0)) 各反復の開始時に。各ループでシードをリセットすることにより、擬似乱数のシーケンスは反復内の time(0) の定数値によって事実上固定されます。 time(0) はループ全体で同じままであるため、同じ乱数シーケンスが生成されます。

問題の解決

この問題に対処するには、次のことをお勧めします。乱数発生器を初期化するのは、各ループ反復内ではなく、プログラムの開始時に 1 回だけです。これにより、ループの反復ごとに異なる乱数シーケンスが使用されるようになります。

修正された実装は次のようになります。

srand(time(0));  // Call srand() once at the start of the program

while (...) {
    x = rand();
    y = rand();
}

この変更により、x と y の値は次のように変わります。ループを繰り返し、さまざまな乱数シーケンスの望ましい動作を生成します。

以上がループ反復で乱数が繰り返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。