今天,我的朋友有一个想法,设置使用产生“使事情变得更加随机”的伪随机数的伪随机数生成器多次的种子。“重置”伪随机数发生器种子多次?
在C#中的一个例子:
// Initiate one with a time-based seed
Random rand = new Random(milliseconds_since_unix_epoch());
// Then loop for a_number_of_times...
for (int i = 0; i < a_number_of_times; i++)
{
// ... to initiate with the next random number generated
rand = new Random(rand.Next());
}
// So is `rand` now really random?
assert(rand.Next() is really_random);
但我在想,这大概可以增加获得正在使用的伪随机数生成器的重复种子的机会。
这
- 会让事情变得更加随机,
- 进行循环,通过使用一定数量的种子,或
- 无助于随机性(即既不增加也不减少)?
伪随机数发生器的任何专家能给出一些详细的解释,以便说服我的朋友吗?我很乐意在某些伪随机数生成器算法中看到解释更多细节的答案。
ou ...你最好的选择是(xkcd)掷骰一次,并简单地使用它作为一个常数。 Nahw只是开玩笑 - 计算机不能使随机数字非常好。每个非伪随机都使用外部(如物理测量)源来进行初始化和随机...因此,对于正常的随机数在应用程序中使用其他任何类似time.h(正如您已经这样做)这样的麻烦是不值得的。如果你真的需要随机数,考虑使用硬件 – Najzero
@Najzero嗯,只是想了解更多关于伪数字发生器的知识,所以我不会为此得到一个核衰变检测器。 :) –
ffffshhh ...没有承诺更多,一切或http://xkcd.com/221/ – Najzero