R中OS之间产生不同的随机数

Dan*_*lls 7 random r

我的随机数略有不同,具体取决于操作系统(Mac vs Linux):

set.seed(890458, kind="Mersenne-Twister", normal.kind="Inversion")
print(rlnorm(1504)[1504], digits=22)
sessionInfo()
Run Code Online (Sandbox Code Playgroud)

Linux的:

> set.seed(890458, kind="Mersenne-Twister", normal.kind="Inversion")
> print(rlnorm(1504)[1504], digits=22)
[1] 2.732876214731374542311

> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.7.0
LAPACK: /usr/lib/lapack/liblapack.so.3.7.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] compiler_3.4.0 tools_3.4.0    digest_0.6.12
Run Code Online (Sandbox Code Playgroud)

苹果电脑:

> set.seed(890458, kind="Mersenne-Twister", normal.kind="Inversion")
> print(rlnorm(1504)[1504], digits=22)
[1] 2.732876214731374098221

> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.5

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] compiler_3.4.0 digest_0.6.12
Run Code Online (Sandbox Code Playgroud)

这是预期的吗?反正是否保证跨平台的重复性?它也发生在rnorm而不是rlnorm但更高的数字.

Ral*_*ich 0

这不是随机生成算法的问题。是不可能的。计算机上的任何伪随机数生成器的工作方式是,它生成在不同距离上具有最小相关性的数字序列。即使内部状态有一点不同,生成的数字序列也完全不同。不可能得到稍微不同的随机数。

另请注意,所有好的随机数算法都使用整数内部状态。浮点输出是“人工的”。

因此,在您的示例中,问题必须位于实际的随机数生成器之外。此外,任何生成器的随机性实际上都是有限的。使用“digits=22”可能没有意义。Mac 和 Linux 库中的某个地方肯定存在精度差异。这很有趣并且可能令人担忧 - 但正如我所说,与随机数算法无关。