跨系统和版本的java伪随机数的再现性?

时间:2012-02-05 18:34:39

标签: java random portability

在给定初始整数参数的情况下,我需要生成受控的伪随机数序列。为此,我使用标准Java Random类,由整数参数播种。我想确保在可预见的将来(甚至更多!),我将跨系统(操作系统,还有Java / JDK版本)生成相同的序列。

总结:Java是否确保其实施版本的伪随机数生成器的可重复性/可移植性?

注意:我问过the exact same question for Python。我之后将实现语言改为Java,但出于其他原因。

1 个答案:

答案 0 :(得分:15)

javadoc解释说:

  

此类的实例用于生成伪随机数流。该类使用48位种子,使用线性同余公式进行修改。 (参见Donald Knuth,“计算机程序设计的艺术”,第2卷,第3.2.1节。)

     

如果使用相同的种子创建了Random的两个实例,并且为每个实例创建了相同的方法调用序列,它们将生成并返回相同的数字序列。按顺序为了保证此属性,为类Random 指定了特定的算法。为了Java代码的绝对可移植性,Java实现必须使用此处显示的class Random所有算法。 但是,class Random的子类允许使用其他算法,只要它们符合所有方法的一般合同。