現在、8 つ以上のパイプ (スレッド) を持つマルチスレッド シミュレーション アプリケーションを実行しています。これらのパイプは、シードによって生成されたランダム シーケンスに依存する非常に複雑なコードを実行します。次に、シーケンスは単一の 0/1 に煮詰められます。
メインスレッドから処理パイプにシードを渡した後、この「ランダム処理」を 100% 決定論的にしたいと考えています。したがって、2 回目の実行で結果を再現できます。
たとえば、(私はこれをコーディングしており、動作します)
Pipe 1 -> Seed: 123 -> Result: 0
Pipe 2 -> Seed: 123 -> Result: 0
Pipe 3 -> Seed: 589 -> Result: 1
これらのプロセスを 1 億回以上実行し、結果を平均化する必要がある場合に問題が発生します。100M のうち 1 つだけが 1 で、残りは 0 である可能性があります。明らかなように、32 ビット シードを に供給して 100M のランダムな値をサンプリングすることはできませんsrand()
。
VS2010 で 64 ビット シードを使用して srand() にシードすること、または同等のアプローチを使用することは可能ですか?
rand() は 2^32 の後に繰り返されますか、それとも繰り返されませんか (内部に隠れた状態があります)?
ありがとう