全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1490 5
2012-05-20
以下是屏幕内容:
-----------------------------------------------------------------------------------------
R version 2.14.0 (2011-10-31)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: i386-pc-mingw32/i386 (32-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> a = 1
> a = a + 0.05
> a <= 1.05
[1] TRUE
> a = 0.1
> a = a + 0.05
> a <= 0.15
[1] FALSE
>

-----------------------------------------------------------------------------------------

我不懂这到底是为什么,请高手指教!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-5-20 16:21:57
不是bug,请看R FAQ的7.31
7.31 Why doesn't R think these numbers are equal?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-20 16:24:59
已经知道答案了,貌似R组人员早就了解该BUG,也不打算修补这一漏洞,他们只给出了一个补救措施:

--------------------------------------------------

Do not use == and != for tests, such as in if expressions, where you must get a single TRUE or FALSE. Unless you are absolutely sure that nothing unusual can happen, you should use the identical function instead

For numerical and complex values, remember == and != do not allow for the finite representation of fractions, nor for rounding error. Using all.equal with identical is almost always preferable.

--------------------------------------------------

所以,a <= 0.15 要改为:a < 0.15 | all.equal(a,0.15)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-20 18:15:50
这不能叫做bug吧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-21 07:28:51
这不是bug
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-8-2 20:02:02
我现在对这一块非常头疼。

为什么?——不仅“==”失效,连纯粹的“>”与“<”也一并失效了。

你想,两个相等的数a,b,就因为系统的原因,造成“a == b”出现 FALSE 的结果。

这还不算完!结果你发现“a > b” 或 “a < b” 的结果变成 TRUE 了!

故 >, < 的判断也会失效!这表示计算机的判断反而是灵敏的,一点点纯计算上的微小差别都会引发误判!

所以,编程时:

a > b  变成 a - b > 0.00001 即 a > b & abs(a - b) > 0.00001
a < b  变成 b - a > 0.00001 即 a < b & abs(a - b) > 0.00001
a == b  变成 abs(a - b) < 0.00001
a >= b  变成 a - b > -0.00001 (注意负号)
a <= b  变成 a - b < 0.00001

语句的目的是使灵敏的计算机迟钝化!0.00001 比计算机内部的标准要“迟钝”很多(即大很多)!

这样反而在一些情况下不容易闹笑话,“0.15 <= 0.15 为FALSE”的笑话就不会出现了。

但是,这样写非常费劲!很吃力!

一个简短的判断,最后竟然搞成这么别扭的式子,我认为这也可以叫BUG了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群