Когда вы вводите целое число, превышающее максимальный целочисленный размер (который вы можете найти, набрав .Machine$integer.max
), тогда R принуждает его к двойному. Более того, есть только (чуть меньше) 2^64 уникальных двойных значений. 2^64 составляет около 1,84 * 10 19, а введенные вами цифры - порядка 10^21. Однако все 64 бита двойника не являются точными битами. Один из них - знаковый бит, а 11 из них - мантисса (то есть биты экспоненты). Таким образом, вы получаете только 52 бит точности, что означает 15 или 16 десятичных пробелов. Вы можете проверить это в R:
> for(i in 10:20)
cat(i,10^i == 10^i+1,"\n")
10 FALSE
11 FALSE
12 FALSE
13 FALSE
14 FALSE
15 FALSE
16 TRUE
17 TRUE
18 TRUE
19 TRUE
20 TRUE
Итак, вы видите, примерно через 15 цифр, точность, обеспечиваемая двойников истощается. В R можно выполнить арифметику с более высокой точностью, но вам нужно загрузить библиотеку, которая предоставляет эту возможность. Одна из таких библиотек: gmp
:
> library(gmp)
> x<-as.bigz("-1128347132904321674821")
> y<-as.bigz("-1128347132904321674822")
> x<y
[1] FALSE
> x>y
[1] TRUE
> x==y
[1] FALSE
> x==y+1
[1] TRUE
Ну, вероятно, необходимо использовать большое количество арифметических пакетов, таких как Rmpfr. Я считаю, что R использует 64-битные двойники для представления этих больших целых чисел, которые дают вам около 16-17 значащих цифр. –
Убедитесь, что вы тоже на 'R 3.x'. –