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

看板R_Language作者 (攸藍)時間9年前 (2015/03/02 16:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 Statistics 看板 #1J5ZDjyB ] 作者: andrew43 (apan) 看板: Statistics 標題: Re: [程式] R: TRUE FALE 的問題 時間: Wed Mar 5 04:11:18 2014 ※ 引述《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
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: celestialgod (111.82.93.51), 03/02/2015 16:55:34
文章代碼(AID): #1Kz2M7Nl (R_Language)
文章代碼(AID): #1Kz2M7Nl (R_Language)