2016-02-11 139 views
0

R中科學記數法的準確性如何?我生成的數據如下所示:R中科學記數法的精確度

-5.59924596431885e-320 

這是一個準確的值嗎?我知道R是通常只有當數是這樣寫的15位小數準確:

-2.1411372887 

所以是科學記數法準確地在如此小的數字?

+0

準確的比較什麼?計算機沒有無限的精確度。理解[浮點運算]的極限是很重要的(http://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal)。但是當你不清楚你想要計算什麼「真實」價值時,很難談論準確性。 – MrFlick

+1

之前曾被問過的問題,例如[在R中處理非常小的數字](http://stackoverflow.com/questions/5802592/dealing-with-very-small-numbers-in-r)和[處理極小數字](http://stackoverflow.com/questions/26513029/handling-extremely-small-numbers)有像'Rmpfr','gmp'和'Brobdingnag'的建議。請通過研究這些選項來顯示努力。 –

+0

如果這些參數是估計值,那麼它們實際上爲零,如果10的功率甚至低至-16,那麼將是如此。 「精度達到15位」的概念來自於乘以浮點數的錯誤傳播問題。它也在R的'double'級別的可能值範圍之外,在其幫助頁面上列爲2e-308至2e + 308。所以我認爲「不準確」是可能的答案。 –

回答

3

這不是一個關於R的問題,而是一個關於浮點表示的問題。正常雙打精確到15或16位十進制數字。然而,最小的正常雙數是2^-1022或2.225074e-308。值越小,可以用雙精度表示,但是你開始失去精度,因爲有效數字將用零填充。因此,例如,1e-320只能精確到3或4位小數,因爲它比min_double小10^12倍。

參見: https://en.wikipedia.org/wiki/Denormal_number

最大值和最小值雙和機器最小的值被存儲在R作爲.Machine。在我的電腦:

> .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 
+0

看到我遇到的問題是當你說「正常雙打精確到15或16位十進制數字」,當一個數字是用科學記數法寫的,這個規則是否適用於整數還是僅限於有效數? – Plinth

2

如果您使用IEEE-754雙打[R(我敢肯定,你是99.99%),有兩個最小值:

  1. 歸最小,其中,因爲@mrip說,是關於2.22507e-308

  2. 規格化最小,大約是4.94066e-324

故事的道德:你在計算中得到denorm,不,他們不能精確到小數點後15位