R
是否存储了可能代表性最小的科学价值?
澄清:在我当前的机器上:
>1e-300
[1] 1e-300
虽然
>1e-400
[1] 0
通过反复试验,我知道它位于我机器上的e-324
标记附近(它也开始失去精度)。
>1e-324
[1] 0
>5e-324
[1] 4.940656e-324
我搜索了.Machine
列表,它存储的值中没有包含值或我正在寻找的指数。
修改
侧面的链接线程表明这应该是.Machine$double.eps
,即2.220446e-16
。显然情况已经不是这样了?
答案 0 :(得分:6)
最小标准化为double.xmin
,如此page中所述。 Wikipedia条目非常有趣,并且具有2^-1074
的次正常限制,大约是4.9406564584124654 x 10^-324
(来自维基百科,Ben Bolker在评论中提到)。您在R中的输出与此值匹配。
double.epsilon
不是你的想法。它是您可以添加到1的最小数字,例如您获得的数字将不会被识别为1.
我建议你阅读有关双精度如何存储在内存中以及双重操作的基础知识。一旦你理解了双重存储的方式,下限是显而易见的。
答案 1 :(得分:1)
对于基础R
,接受的答案仍然正确,但使用包Rmpfr
可以实现任意精度。例如:
首先,注意基地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
。
现在使用'Rmpfr`包中的mpfr
函数将字符串强制转换为浮点数:
> 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