这会否:
new java.util.Random(/* random seed */ 0)
new java.util.Random(/* random seed */ 1)在某种程度上导致了“更少的随机”/“更相似的”随机发生器?
new java.util.Random(/* random seed */ 0)
new java.util.Random(/* random seed */ 1000)换句话说:如果随机产生器的随机种子是相似的,那么我是否有风险从随机生成器获得类似的ints序列?
发布于 2016-01-20 19:29:49
不,相似的种子,不会产生相似的随机数。
只有相同的种子才能产生相同的数目。
设置种子的代码是:
void setSeed(long seed) {
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
..}这个公式避免了this.seed获取输入种子值的简单值(在构造函数中使用或由setSeed()使用)。
然而,也有一些弱点,als在http://dontpanic.42.nl/2011/03/when-random-isn-as-random-as-expected.html中解释说
发布于 2016-01-20 19:30:32
用于产生伪随机数的状态更新是混沌.因此,使用相邻的种子值会产生完全不同的状态轨迹。
发布于 2016-01-20 19:48:36
随机数从来都不是随机的。它们完全是预先定义的,给出相同的种子将导致相同的数目,甚至超过一百万次不同的命令运行,这就是它们被称为“伪随机”的原因。最好的方法是在每次运行程序时都使用不同的值作为种子,这些值不能很容易地预测,例如当前的时间和日期以及/或已经过去的时钟周期的数目。
https://stackoverflow.com/questions/34908753
复制相似问题