12

さまざまな場所で rand() を呼び出す C++ アプリケーションがあります。srand()rand() が適度にランダムであることを確認するために定期的に初期化する必要がありますか?それとも、アプリの起動時に 1 回呼び出すだけで十分ですか?

4

4 に答える 4

18

スレッドが 1 つしかない場合は、1シードします。頻繁に再シードすると、実際には乱数の統計的特性の一部が壊れる可能性があります。複数のスレッドがある場合は、まったく使用randしないでください。むしろ、drand48_rスレッドごとの状態を維持できる のようなスレッドセーフなものを使用してください (したがって、スレッドごとに 1 回シードできます)。

于 2011-08-05T09:56:22.290 に答える
4

いいえ、一度だけ電話してください。シード値を使用して、実行ごとにランダム シーケンスを同じにします。これは、(たとえば) デバッグのためにゲームをリプレイするときに、ゲームの動作を決定論的にするのに役立ちます。

于 2011-08-05T09:55:56.490 に答える
4

アプリケーションの開始時に 1 回だけ。

于 2011-08-05T09:55:16.653 に答える
3

アプリの起動時に一度呼び出す

于 2011-08-05T09:55:08.580 に答える