最低可评估的科学价值?

时间:2013-11-05 00:19:37

标签: r

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。显然情况已经不是这样了?

2 个答案:

答案 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