Fw: [程式] R: TRUE FALE 的問題
※ [本文轉錄自 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
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
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章