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。很明显现在不是这样了?
发布于 2013-11-05 00:36:23
最小的标准化是double.xmin,如本页面所描述的。维基百科条目非常有趣,并且有一个低于正常范围的限制,即2^-1074,它大约是4.9406564584124654 x 10^-324 (如本·博尔克在评论中提到的那样)。R中的输出与此值相匹配。
double.epsilon不是你想的那样。这是最小的数字,你可以添加到1,如你得到的数字,将不会被承认为1。
我建议您阅读有关双操作是如何存储在内存中的以及双操作的基本知识。一旦您了解了一个双的存储方式,下限就很明显了。
发布于 2017-10-25 23:58:39
对于基本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-324https://stackoverflow.com/questions/19779806
复制相似问题