R中科学记数法的精确性

时间:2016-02-11 20:28:32

标签: r decimal precision numeric scientific-notation

R中科学记数法的准确度如何?我正在生成数据,如下所示:

Server srv = new Server();
if (srv.GetActiveDBConnectionCount(dbName) > 0)
{
    MessageBox.Show("Database '" + dbName + "' is currently in use");
}

这是准确的价值吗?我知道当数字写得像这样时,R通常只精确到15位小数:

-5.59924596431885e-320

科学记数法在如此小的数字下是否准确?

2 个答案:

答案 0 :(得分:3)

这不是关于R的问题,而是关于浮点表示的问题。正常的双精度数精确到15或16位十进制数。但是,最小的正常双倍是2 ^ -1022,或2.225074e-308。小于此值的值可以用双精度表示,但是你开始失去精度,因为有效数字将用零填充。因此,例如,1e-320只能精确到大约3或4个十进制数字,因为它比min_double小10 ^ 12倍。

请参阅: https://en.wikipedia.org/wiki/Denormal_number

max和min double和机器epsilon的值作为.Machine存储在R中。在我的电脑上:

> .Machine
$double.eps
[1] 2.220446e-16

$double.neg.eps
[1] 1.110223e-16

$double.xmin
[1] 2.225074e-308

$double.xmax
[1] 1.797693e+308

$double.base
[1] 2

$double.digits
[1] 53

$double.rounding
[1] 5

$double.guard
[1] 0

$double.ulp.digits
[1] -52

$double.neg.ulp.digits
[1] -53

$double.exponent
[1] 11

$double.min.exp
[1] -1022

$double.max.exp
[1] 1024

$integer.max
[1] 2147483647

$sizeof.long
[1] 8

$sizeof.longlong
[1] 8

$sizeof.longdouble
[1] 16

$sizeof.pointer
[1] 8

答案 1 :(得分:2)

如果你在 R 中使用IEEE-754双打(并且我确定你是99.99%),则有两个最小值:

  1. 规范化的最小值,正如@mrip所说,约为2.22507e-308

  2. 非规范化最小值,约为4.94066e-324

  3. 故事的道德:你在计算中得到了否定风,不,它们不能精确到小数点后15位