跨系统和版本的java伪随机数的再现性?
在给定初始整数参数的情况下,我需要生成受控的伪随机数序列。 为此,我使用标准Java Random类,由整数参数播种。 我想确保在可预见的未来(甚至更多!)中我将跨系统(操作系统,还有Java / JDK版本)生成相同的序列。
总结:Java是否确保其伪随机数生成器在实现和版本中的可重复性/可移植性?
注意:我已经为Python提出了完全相同的问题 。 我之后将实现语言改为Java,但出于其他原因。
是。
javadoc解释说:
该类的实例用于生成伪随机数流。 该类使用48位种子,使用线性同余公式进行修改。 (参见Donald Knuth,计算机程序设计的艺术,第2卷,第3.2.1节。)
如果使用相同的种子创建两个
Random
实例,并且为每个实例创建相同的方法调用序列,则它们将生成并返回相同的数字序列。 为了保证此属性, 为Random
类指定了特定的算法 。 为了Java代码的绝对可移植性,Java实现必须使用此处显示的所有算法用于class Random
。 但是,class Random
类的子class Random
允许使用其他算法,只要它们遵守所有方法的一般合同即可。