在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)

我不知道为什么...非常感谢您的帮助

最佳答案

正如David Arenburg指出的那样,至少在Windows计算机上,这是32位和64位R版本之间的区别。大概涉及某种舍入误差。有趣的是,答案是正确的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

09-25 22:15