Java伪随机数在系统和版本之间的可重复性?

2022-09-03 14:51:33

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

总而言之:Java是否确保其伪随机数生成器在实现版本之间的可重复性/可移植性?

注意:我为Python问了完全相同的问题。此后,我将实现语言更改为Java,但出于其他原因。


答案 1

是的。

javadoc 解释道:

此类的实例用于生成伪随机数流。该类使用 48 位种子,该种子使用线性同余公式进行修改。(参见 Donald Knuth, The Art of Computer Programming, Volume 2, Section 3.2.1。

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


答案 2

推荐