尝试使用 as.binary 将大整数转换为二进制

问题描述

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

警告信息:

  1. h(num) 中:模数 2 中可能完全丧失准确性:
  2. 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. h(num) 中:模数可能完全丧失准确性
  2. diff(x%%2^(num_digits:0)) 中:模数可能完全丧失准确性

解决方法

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

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

再次感谢您的帮助!