2013-01-31 67 views
-3

R是否存在uniroot和處理浮點的已知問題?R中的浮點不準確性?

>str(uniroot(function(x) x*(x^2-1) + .5, lower = -2, upper = 2, 
+     tol = 0.0001)) 

List of 4 
$ root  : num -1.19 
$ f.root : num -2.55e-07 
$ iter  : int 7 
$ estim.prec: num 5e-05 
> -1.19 * (1.19^2 - 1) + 0.5 
[1] 0.004841 

顯然f.root的值不等於手工計算的函數的值。

+4

http://upload.wikimedia.org/wikipedia/en/b/b9/MagrittePipe.jpg – hadley

+1

函數只顯示了3個無花果 –

+1

您使用了錯誤的手 –

回答

3

您的根值顯示爲2 s.f.,但它估計5e-5的精度。這表明它「知道」你沒有看到的答案中的其他數字。嘗試打印出root-1.19,你會明白我的意思。

特別地,str旨在作爲快速地查看的R對象的結構,所以它故意打印的位數有限數量:的digits.d缺省值是3(參照?str)。只要打印結果(如uniroot(...)u1 <- uniroot(...); u1就會顯示更多數字並可能避免了混淆。)

+0

感謝您的快速回答 – gkb0986

+1

不客氣,如果這解決了您的問題,請「接受」答案。社區「這個答案解決了這個問題」 – Floris

+0

我想給@benbolker一個快速的大喊,他編輯了答案並使其更加完整! – Floris