2012-11-28 83 views
1

可能重複:
Why are these numbers not equal?模錯誤中的R

只注意到在R.我猜這是0.6的表示方式這個bug,但任何人都知道到底發生了什麼?

據R:

0.3 %% 0.2 = 0.1 
0.4 %% 0.2 = 0 
0.5 %% 0.2 = 0.1 
**0.6 %% 0.2 = 0.2** 
0.7 %% 0.2 = 0.1 
0.8 %% 0.2 = 0 

這是怎麼回事?

+7

[FAQ 7.31(http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why -doesn_0027t-R-think-these-numbers-are-equal_003f) –

+0

@JoshuaUlrich:那真的應該是一個答案,而不僅僅是評論... +1。 –

+1

新標籤「r-faq-7.31」看起來對我越來越有用... –

回答

5

除了@joshua Ulrich的評論

?'%%'

%%並且x%/%Y可用於非整數Y,例如1%/%0.2,但結果受到表示錯誤的影響,因此可能與平臺有關。由於0.2 IEC 60059表示是二進制分數比0.2稍大,得到的答案爲1%/ 0.2%應該是4,但大多數平臺給予5

也類似於爲什麼我們得到這個

> .1 + .1 + .1 == .3 
[1] FALSE 

爲@Ben博克指出的那樣,你可能想使用類似

> 3:8 %% 2/10 
[1] 0.1 0.0 0.1 0.0 0.1 0.0 
+0

(正如現在刪除的答案中指出的那樣)'解決方案'是在可能的情況下使用整數算術:'6 %% 2'而不是'0.6 %% 0.2' –

+0

Yep,已結束做到這一點。謝謝。 – mike

+0

這似乎起作用:'Mod < - function(n,m)if(m> = n)return(n); (strsplit(paste(n),「。」,fixed = T)[[1]] [2]); div < - floor(n/m); rem < - n - (div * m); return(round(rem,n.digits)) } ' – theEricStone