R中科学记数法的准确度如何?我正在生成数据,如下所示:
Server srv = new Server();
if (srv.GetActiveDBConnectionCount(dbName) > 0)
{
MessageBox.Show("Database '" + dbName + "' is currently in use");
}
这是准确的价值吗?我知道当数字写得像这样时,R通常只精确到15位小数:
-5.59924596431885e-320
科学记数法在如此小的数字下是否准确?
答案 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%),则有两个最小值:
规范化的最小值,正如@mrip所说,约为2.22507e-308
非规范化最小值,约为4.94066e-324
故事的道德:你在计算中得到了否定风,不,它们不能精确到小数点后15位