Re: [程式] R: TRUE FALE 的問題
※ 引述《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
03/05 20:24, 1F
推
03/05 20:26, , 2F
03/05 20:26, 2F
※ celestialgod:轉錄至看板 R_Language 03/02 16:55
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):