Fw: [程式] R: TRUE FALE 的问题

楼主: celestialgod (天)   2015-03-02 16:55:34
※ [本文转录自 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
可能会有更多帮助。
作者: memphis (让你喜欢这世界~)   2015-03-05 20:24:00
round(k,2)==0.15 这样如何?
作者: ee012345 (死小孩)   2015-03-05 20:26:00
谢谢你~

Links booklink

Contact Us: admin [ a t ] ucptt.com