只注意到在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
這是怎麼回事?
只注意到在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
這是怎麼回事?
除了@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
(正如現在刪除的答案中指出的那樣)'解決方案'是在可能的情況下使用整數算術:'6 %% 2'而不是'0.6 %% 0.2' –
Yep,已結束做到這一點。謝謝。 – mike
這似乎起作用:'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
[FAQ 7.31(http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why -doesn_0027t-R-think-these-numbers-are-equal_003f) –
@JoshuaUlrich:那真的應該是一個答案,而不僅僅是評論... +1。 –
新標籤「r-faq-7.31」看起來對我越來越有用... –