【问题标题】:R addition of large and small numbers is ignoring the smaller valuesR添加大小数字忽略较小的值
【发布时间】:2016-08-07 15:46:42
【问题描述】:

在 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

大数加法的精度似乎存在某种问题,但我不知道如何解决这个问题,以便获得所需的结果。

任何帮助将不胜感激。如果有任何格式不正确,我深表歉意,这是我在网站上的第一篇文章。

【问题讨论】:

    标签: r addition largenumber


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-03
      • 2016-01-29
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多