R大小数字的加法忽略了较小的值

时间:2016-08-07 15:46:42

标签: r addition largenumber

我在R中添加更大的数字时遇到问题。较小的值会被忽略,并且会产生不正确的结果。

例如,我一直在使用二进制到十进制转换器:Convert binary string to binary or decimal value。倒数第二步看起来像这样:

2^(which(rev(unlist(strsplit(as.character(MyData$Index[1]), "")) == 1))-1)
[1] 1          2          32          64          256          2048          ...

我没有包括所有数字用于长度目的,但是当这些数字相加时,它们将产生二进制数的整数值。正确的结果应该是4,919,768,674,277,575,011,但R给我的结果是4,919,768,674,277,574,656。请注意,此数字是关闭355,这是前5个列出的数字的总和。

我原本以为它可能与整数限制有关,但我测试了它,R可以处理比我需要的数字更大的数字。这是我尝试过的一个例子,它再次产生了错误的结果:

2^64
[1] 18446744073709551616 #Correct Value
2^65
[1] 36893488147419103232 #Correct Value
2^64 + 2^65
[1] 55340232221128654858 #Correct Value
2^64 + 2^65 + 1
[1] 55340232221128654858 #Incorrect Value

似乎有大量添加精度的某种问题,但我不知道如何解决这个问题,以便我能得到理想的结果。

非常感谢任何帮助。如果有任何格式不正确,我很抱歉,这是我在网站上的第一篇文章。

1 个答案:

答案 0 :(得分:2)

对于大整数,我们可以使用as.bigz

中的gmp
library(gmp)
as.bigz(2^64) + as.bigz(2^65) + 1
#   Big Integer ('bigz') :
#[1] 55340232221128654849