接受的答案对于 base 仍然是正确的R
,但使用包Rmpfr
可以实现任意精度。例子:
首先,注意 base 中的问题R
:
> p <- c("5e-600","2e-324","3e-324","4e-324", "5e-324","6e-324","7.1e-324","8e-324")
> as.numeric(p)
[1] 0.000000e+00 0.000000e+00 4.940656e-324 4.940656e-324 4.940656e-324 4.940656e-324
[7] 4.940656e-324 9.881313e-324
请注意,当我们接近极限时,精度是一个问题,所有值都是4.940656e-324
.
现在使用mpfr
“Rmpfr”包中的函数将字符串转换为浮点数:
> library(Rmpfr)
> .N <- function(.) mpfr(., precBits = 20)
> .N(p)
8 'mpfr' numbers of precision 20 bits
[1] 5.0000007e-600 2.00000e-324 2.9999979e-324 4.00000e-324 4.9999966e-324 5.9999959e-324
[7] 7.09999e-324 8.00000e-324