Re: [程式] R: TRUE FALE 的問題

看板Statistics作者 (apan)時間10年前 (2014/03/05 04:11), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《ee012345 (死小孩)》之銘言: : [軟體程式類別]: : R : [問題敘述]: : 昨天發現一件奇怪的事情,例如: : k=seq(0.1,0.2,0.05); : k==0.15 : 照理說,output應該是要 : FALSE TRUE FALSE : 但是跑出來的output卻是 : FALSE FALSE FALSE : 造成我不小的困擾QQ : [軟體熟悉度]: : 中(3個月到1年) 應該是浮點數的精確度問題。 你可以看到, > sprintf("%10.30f", 0.15) [1] "0.149999999999999994448884876874" 但 > sprintf("%10.30f", k[2]) [1] "0.150000000000000022204460492503" 可見二者的差距可能超過 R 的精確度辨別容忍度,所以 0.15==k[2] 為 F。 問題的主要原因是因為你用 seq(0.1,0.2,0.05) 後產生的 0.15 和直接輸入的 0.15 的差距太大了。 如果你換成 > k==seq(0.1, 0.2, 0.05)[2] [1] FALSE TRUE FALSE 就沒問題了。 另一個解法就是繞過浮點數,用字串來辨別。 我對 R 預設的浮點數處理不是非常了解, 但你可以看一下 http://rwiki.sciviews.org/doku.php?id=misc:r_accuracy:decimal_numbers 可能會有更多幫助。 -- http://apansharing.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.37.172

03/05 20:24, , 1F
round(k,2)==0.15 這樣如何?
03/05 20:24, 1F

03/05 20:26, , 2F
謝謝你~
03/05 20:26, 2F
celestialgod:轉錄至看板 R_Language 03/02 16:55
文章代碼(AID): #1J5ZDjyB (Statistics)
討論串 (同標題文章)
文章代碼(AID): #1J5ZDjyB (Statistics)