我在研究R语言的随机数生成器(RNG),并且好奇当需要生成大量的随机数时,32位实现的Mersenne-Twister是否会限制其性能。因此,我进行了一个简单的测试:
set.seed(8)
length(unique(runif(1e8)))
# [1] 98845641
1e8 - 98845641
# 1154359
事实证明,在1亿次抽取中确实存在大量重复。
当我切换到由dqrng
包实现的64位MT RNG版本时,问题就不会出现。
问题1:
“64位”是指所使用的浮点数类型吗?
问题2:
我的结论是因为可能数字范围更大(64位FP vs 32位FP),在使用64位MT时重复的可能性较小,这是正确的吗?
unique
函数执行精确匹配,就像identical
函数一样。请尝试使用unique(c(pi, pi + 1e-10))
。 - RJ-