0

我正在使用“R.utils”包中的 intToBin() 函数,并且无法使用它将大十进制数转换为二进制数。

我收到此错误:强制引入的 NAs。

是否有另一个功能可以处理大数字/是否有算法/代码来实现这样的功能?

谢谢

4

2 回答 2

2

如果您阅读 的帮助页面intToBin,它会非常明确地说它需要“整数”输入。这些不是数学“整数”,而是计算机语言定义的整数,限制为 16 位(或类似的东西)。

您需要找到(或编写 :-() 一个将浮点数转换为二进制浮点数的函数,或者如果你幸运的话,也许Rmpfr或者gmp执行任意精度“大数”数学的包可能有一个浮点数-to-binary 工具。

到发布此内容时,有人会通过发布现有功能来暴露我的无知,这与我的运气有关。

编辑——也许像包pack

于 2012-10-29T20:50:29.413 回答
0

我需要一个双精度数和十六进制数之间的转换器。所以我写了这些,可能对其他人有帮助

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")

尚未经过广泛测试,如果您发现问题,请告诉我。

于 2015-02-24T08:06:57.277 回答