首页 > 解决方案 > 尝试使用 as.binary 将大整数转换为二进制

问题描述

我有需要转换为二进制的大整数,但我不断收到以下警告消息:

警告信息:

  1. h(num):模数 2 中可能完全丧失精度:
  2. In diff(x%%2^(num_digits:0)): 模数精度可能完全丧失

我发现这是因为将数字转换为二进制本质上只是除以二并确定是否有余数很多次,并且 R 具有它能够使用的最大位数而不会丢失信息结束。关于如何解决这个问题的任何建议?

示例代码:

library(binaryLogic)

as.binary(13256712356712312361)

[1] 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0

警告信息:

  1. In h(num): 模数精度可能完全丧失
  2. In diff(x%%2^(num_digits:0)): 模数精度可能完全丧失

标签: rbinaryarbitrary-precisionmultiprecision

解决方案


我无法让它使用与我在示例中列出的整数一样大的整数,但这适用于我正在做的适当大小的整数。(我相信 Rmpfr 的最大二进制输出为 53 位,而我列出的整数需要 64 位)。尽管如此,我用 as.binary() 能做的还是 53 位数。下面的示例非常接近极限。

library(Rmpfr)

x <- unlist(strsplit(formatBin(1325671235671234),split = 'b', fixed = T))[2]
Dec <- as.integer(unlist(strsplit(x, split = '+', fixed = T))[2])
x <- unlist(strsplit(x, split = 'p', fixed = T))[1]
x <- substring(gsub("[.]","",x),1,Dec)
y <- c()
for(i in 1:Dec){
    y[i] <- as.integer(substring(x,i,i))
}

y

再次感谢您的帮助!


推荐阅读