我正在使用“R.utils”包中的 intToBin() 函数,并且无法使用它将大十进制数转换为二进制数。
我收到此错误:强制引入的 NAs。
是否有另一个功能可以处理大数字/是否有算法/代码来实现这样的功能?
谢谢
我正在使用“R.utils”包中的 intToBin() 函数,并且无法使用它将大十进制数转换为二进制数。
我收到此错误:强制引入的 NAs。
是否有另一个功能可以处理大数字/是否有算法/代码来实现这样的功能?
谢谢
如果您阅读 的帮助页面intToBin
,它会非常明确地说它需要“整数”输入。这些不是数学“整数”,而是计算机语言定义的整数,限制为 16 位(或类似的东西)。
您需要找到(或编写 :-() 一个将浮点数转换为二进制浮点数的函数,或者如果你幸运的话,也许Rmpfr
或者gmp
执行任意精度“大数”数学的包可能有一个浮点数-to-binary 工具。
到发布此内容时,有人会通过发布现有功能来暴露我的无知,这与我的运气有关。
编辑——也许像包pack
我需要一个双精度数和十六进制数之间的转换器。所以我写了这些,可能对其他人有帮助
doubleToHex <- function(x) {
if(x < 16)
return(sprintf("%X", x))
remainders <- c()
while(x > 15) {
remainders <- append(remainders, x%%16)
x <- floor(x/16)
}
remainders <- paste(sprintf("%X", rev(remainders)), collapse="")
return(paste(x, remainders, sep=""))
}
hexToDouble <- function(x) {
x <- strsplit(x,"")[[1]]
output <- as.double(0)
for(i in rev(seq_along(x))) {
output <- output + (as.numeric(as.hexmode(x[i]) * (16**(length(x)-i))))
}
return(output)
}
doubleToHex(x = 8356723)
hexToDouble(x = "7F8373")
尚未经过广泛测试,如果您发现问题,请告诉我。