Scala Random创建随机对象时种子会做什么

标签 scala random random-seed

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

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

当您继续使用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)。

关于Scala Random创建随机对象时种子会做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315692/

相关文章:

scala - 为协变集合添加 `to[Col[_]]` 方法

Scala.MatchError : String Extraction using regular expression

postgresql - 具有随机排序行的可重复分页

r - 我可以以某种方式 get.seed() 吗?

tomcat - 使用 Tomcat/Scala 保持状态的最佳方式?

scala - Spark Streaming - 根据按键分组的键值对计算统计信息

bash - 如何在 bash 中打乱序列号列表

random - Python-属性错误: 'int' object has no attribute 'randint'

ios - 需要按钮多次重复相同的功能

r - 为什么 R 包会加载随机数?