2013-11-28 47 views
1

當我用R 3.0.1進行簡單計算時,得到了以下結果。我的問題是,爲什麼第一個和第三個方程的值不等於0?只有R中簡單計算的負值

> -0.0082 + 0.0632 - 0.055 
[1] 6.938894e-18 
> -0.0082 - 0.055 + 0.0632 
[1] 0 
> 0.0632 - 0.0082 - 0.055 
[1] 6.938894e-18 
+0

另請參閱http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f – Henrik

回答

6

有限實數集可以精確地表示爲64位floating-point值(這是你使用的是什麼)。碰巧,您示例中的三個值都不屬於該類別:

> format(0.0082, digits=20) 
[1] "0.0082000000000000006911" 
> format(0.0632, digits=20) 
[1] "0.063200000000000006173" 
> format(0.055, digits=20) 
[1] "0.055000000000000000278" 

這意味着所有的計算都是不精確的。

與您的示例特別相關的事實是floating-point addition is not associative

對於一個優秀的背景,請參閱What Every Computer Scientist Should Know About Floating-Point Arithmetic