我將使用以下代碼在R中生成一個從0.0
到1.0
的矢量v
。
但是,v
僅限於0.99
。R中的循環問題
> s <- 0.0; v <- numeric();
> while (s <= 1){
+ v <- append(v, s)
+ s <- s + 0.01
+ }
> v
[1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
[16] 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29
[31] 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44
[46] 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59
[61] 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71 0.72 0.73 0.74
[76] 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89
[91] 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99
>
所以我看看s
和while循環中的邏輯。
我發現了一些謎...
> s <= 1
[1] FALSE
> s == 1
[1] FALSE
> s
[1] 1
假設s
應1.01
,但只去1
...
因此,我們知道s
是1
,但爲什麼它不等於1
?
(我是新來的R,對不起,問愚蠢的問題。)
原因單曲<= 1'和單曲== 1'失敗是由於浮點錯誤。 – Justin 2013-03-25 20:43:13
瀏覽常見問題通常是值得的時間投資:http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f – 2013-03-25 20:46:39