繁体   English   中英

Scala随机种子在创建随机对象时做了什么

[英]Scala Random what does seed do when creating random object

我对scala相当新,所以这可能是一个愚蠢的问题。 我知道当你做nextInt(seed)它会使用种子但是当你创建对象时,它的种子是什么? 例如,在这行代码中:

val rnd = new scala.util.Random(1000)

当你继续使用rnd.nextInt(100)或类似的rnd.nextInt(100)时,这似乎对数字的结果没有影响。

当调用nextInt(n)n 不是种子 ,它是返回的伪随机数的上限(0到n)。

创建 Random实例时,传递的数字是种子 它确实对结果有影响:

val r1 = new scala.util.Random(1)
r1.nextInt(1000)  // -> 985
val r2 = new scala.util.Random(2)
r2.nextInt(1000)  // -> 108 - different seed than `r1`
val r3 = new scala.util.Random(1)
r3.nextInt(1000)  // -> 985 - because seeded just as `r1`

种子永远不会在返回的数字中直接观察到(除了它们遵循不同的序列),因为a)它在内部进一步加扰,b)生成的数字使用种子上的多个按位运算的组合。

通常,您将为种子使用任意固定数字,以保证生成的序列是可重现的,或者您使用另一个伪随机数,例如当前计算机时钟(例如System.currentTimeMillis )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM