在Rstudio中(使用R 3.1.1)运行时,
length(unique(sort(c(outer(2:100,2:100,"^")))))
# 9220
在R 3.1.1中,当我运行时,
length(unique(sort(c(outer(2:100,2:100,"^")))))
# 9183
(正确的输出是9183)
我无法弄清楚为什么......非常感谢帮助
答案 0 :(得分:3)
正如David Arenburg所说,这是32位和64位R版本之间的差异,至少在Windows机器上是这样。据推测,涉及某种舍入错误。有趣的是,32位R的答案是正确的,而64位的R找到了太多的唯一数字。
首先确认9183
确实是正确的答案,我使用了gmp
包(C多精度算术库GMP的包装器),它提供了不受舍入误差影响的结果:
library(gmp)
x <- as.bigz(2:100)
length(unique(do.call(c, sapply(x, function(X) x^X))))
[1] 9183
以下是我的32位R的结果:
length(unique(sort(c(outer(2:100,2:100,"^")))))
# [1] 9183
R.version[1:7] _
# platform i386-w64-mingw32
# arch i386
# os mingw32
# system i386, mingw32
# status
# major 3
# minor 1.2
以下是我的64位R的结果:
length(unique(sort(c(outer(2:100,2:100,"^")))))
# [1] 9220
R.version[1:7]
# platform x86_64-w64-mingw32
# arch x86_64
# os mingw32
# system x86_64, mingw32
# status
# major 3
# minor 1.2