R中科學記數法的準確性如何?我生成的數據如下所示:R中科學記數法的精確度
-5.59924596431885e-320
這是一個準確的值嗎?我知道R是通常只有當數是這樣寫的15位小數準確:
-2.1411372887
所以是科學記數法準確地在如此小的數字?
R中科學記數法的準確性如何?我生成的數據如下所示:R中科學記數法的精確度
-5.59924596431885e-320
這是一個準確的值嗎?我知道R是通常只有當數是這樣寫的15位小數準確:
-2.1411372887
所以是科學記數法準確地在如此小的數字?
這不是一個關於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
看到我遇到的問題是當你說「正常雙打精確到15或16位十進制數字」,當一個數字是用科學記數法寫的,這個規則是否適用於整數還是僅限於有效數? – Plinth
如果您使用IEEE-754雙打[R(我敢肯定,你是99.99%),有兩個最小值:
歸最小,其中,因爲@mrip說,是關於2.22507e-308
規格化最小,大約是4.94066e-324
故事的道德:你在計算中得到denorm,不,他們不能精確到小數點後15位
準確的比較什麼?計算機沒有無限的精確度。理解[浮點運算]的極限是很重要的(http://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal)。但是當你不清楚你想要計算什麼「真實」價值時,很難談論準確性。 – MrFlick
之前曾被問過的問題,例如[在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'的建議。請通過研究這些選項來顯示努力。 –
如果這些參數是估計值,那麼它們實際上爲零,如果10的功率甚至低至-16,那麼將是如此。 「精度達到15位」的概念來自於乘以浮點數的錯誤傳播問題。它也在R的'double'級別的可能值範圍之外,在其幫助頁面上列爲2e-308至2e + 308。所以我認爲「不準確」是可能的答案。 –