RStudio и R терминал дают разные выходы

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

Я не могу выяснить, почему... помощь очень ценится

1 ответов


как отмечает Дэвид Аренбург, это разница между 32-разрядными и 64-разрядными версиями R, по крайней мере, на машинах Windows. Предположительно, это какая-то ошибка округления. Интересно, что 32-битный R получает правильный ответ, тогда как 64-битный R находит слишком много уникальных чисел.

во-первых, чтобы подтвердить, что 9183 - это действительно правильный ответ, я использовал gmp пакет (обертка для библиотеки GMP множественной точности C), которая предоставляет результаты, которые не являются с учетом ошибок округления:

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