r - 尝试使用 as.binary 将大整数转换为二进制
问题描述
我有需要转换为二进制的大整数,但我不断收到以下警告消息:
警告信息:
- 在
h(num)
:模数 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
警告信息:
- In
h(num)
: 模数精度可能完全丧失 - In
diff(x%%2^(num_digits:0))
: 模数精度可能完全丧失
解决方案
我无法让它使用与我在示例中列出的整数一样大的整数,但这适用于我正在做的适当大小的整数。(我相信 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
再次感谢您的帮助!
推荐阅读
- excel - 每天循环浏览一个工作簿并根据选项卡名称将工作表复制到另一个工作簿
- python - 如何在 GitHub 操作构建期间引用我的存储库中的目录?
- javascript - webpack-dev-server 在语法错误后停止编译,需要重新启动
- css - 圆角底部 div 曲线角度不响应
- log4net - 使用 Common.Logging 从 log4net 切换到 Serilog
- javascript - 正则表达式删除括号内的字母数字和特殊字符
- ruby-on-rails - Webpacker::Manifest::MissingEntryError in Authentication::Login#index
- bash - 在 MacOS 中搜索特定文件名并发送电子邮件(如果存在)
- c++ - 使用 C++ 指针调用 python 函数
- regex - 在相邻字符串的特殊字符之间添加空格