私はsrandom()とrandom()を使って、Unixシステム上でcで乱数を生成しています。私は複数のRNGを持っていたいと思います。同じシードを与えられたそれぞれは、同じシーケンスを出力する必要があります。私はまた、それぞれの状態を保存して復元したいと思います。擬似コードの例を次に示します。c/Unixの複数の乱数ジェネレータの状態
R1 = new_rng(5); //5 is the seed
R2 = new rng(5); //5 is the seed here, too.
a = R1.random();
b = R1.random();
d = R2.random(); //a == d
s1 = R2.get_state(); //save the state of R2
e = R2.random(); //b == e
R2.set_state(s1); //restore the state of R2
f = R2.random(); //b == f
どうすればよいですか? RNGは異なるスレッドに分岐することがあり、新しいスレッドを作成するときにはRNGの状態を複製する必要があります。
まあ、 "醜い"解決策は、シードと何回ランダムが呼び出されたかを保存するクラスを作成し、それを使って状態を復元することです。もちろん、あなたが本当に遅くなるたくさんの数字を使うならば。 –