【发布时间】:2015-04-20 14:43:24
【问题描述】:
我知道伪随机生成器是确定性的,即,当使用相同的种子时,它们会产生相同的输出序列。在实践中,只有当您使用相同的平台(即相同的硬件、操作系统等)时,这一切都是正确的。
我知道,但是,在某些情况下,当您在不同平台上运行相同的代码时,您可能会得到不同的答案(此处简要指出:How to generate a repeatable random number sequence?)。
作为另一个例子,本文在一些神经成像应用的背景下研究了这种差异的一些原因: http://journal.frontiersin.org/article/10.3389/fninf.2015.00012/abstract
我的问题是对于这种现象是否有一个有据可查的一般解释。任何其他指针表示赞赏。
换句话说,我关心的是在什么情况下会危及伪随机生成器的再现性?以及如何避免这些情况(并真正保证跨平台重现性)?
【问题讨论】:
-
“在实践中,只有当你在同一个平台上时,这一切都是正确的,即相同的硬件、操作系统等。” - 不确定这是否完全正确。这将取决于您的整体环境 - 例如 Java 将提供定义明确的 PRNG(通过提供者 spi 接口),可以跨平台正确重复,等等......
-
所以我想“如何避免这些情况”的部分答案是选择具有明确定义的 PRNG 语义的开发环境!
-
感谢 BadZen。您是否知道您的声明(Java 的 PRNG 语义被明确定义)被记录在某处?
-
Mahdi - 这有两个部分 - PRNG 作为比特流的实现,以及浮点运算的语义一旦你拥有它们。第一部分的文档位于docs.oracle.com/javase/7/docs/api/java/util/Random.html - 第二部分的文档位于en.wikipedia.org/wiki/Strictfp(介绍)和语言规范docs.oracle.com/javase/specs
标签: random cross-platform reproducible-research