Как создать вектор (10 ^ 16 + 1, 10 ^ 16 + 2, , 10 ^ 16 + 1000) с помощью R?

Я хотел бы создать следующий вектор (10 ^ 16 + 1, 10 ^ 16 + 2,..., 10 ^ 16 + 1000). Но если я попробую так:

daten <- rep(1e+16,1000)
daten + 1:1000

Это дает мне только приближение:

[1] 10000000000000000 10000000000000002 10000000000000004 10000000000000004
[5] 10000000000000004 10000000000000006 10000000000000008 10000000000000008
[9] 10000000000000008 10000000000000010 10000000000000012 10000000000000012
[13] 10000000000000012 10000000000000014 10000000000000016 10000000000000016 
 ......

Как я могу получить R для более точного расчета? Спасибо


person Joshua    schedule 10.11.2018    source источник
comment
Насколько точнее?   -  person Rich Scriven    schedule 10.11.2018
comment
R не является (по крайней мере, из коробки) калькулятором произвольной точности. В вашем примере вы имеете дело с арифметикой с плавающей запятой. en.wikipedia.org/wiki/IEEE_754#Basic_formats   -  person jogo    schedule 10.11.2018
comment
@Rich Scriven: чтобы последняя цифра была правильной   -  person Joshua    schedule 10.11.2018


Ответы (1)


Пакет Rmpfr обеспечивает столько точности, сколько вам нужно. Создавайте числа с помощью функции mpfr, указав значение + необходимое количество бит точности.

library(Rmpfr)
daten <- mpfr(1:1000, 120)
daten <- daten + mpfr(1e16, 120)
print(daten[1:5])

Это дает следующее:

5 'mpfr' numbers of precision  120   bits 
[1] 10000000000000001 10000000000000002 10000000000000003 10000000000000004 10000000000000005
person Edward Carney    schedule 10.11.2018