找回密码
 立即注册
查看: 4436|回复: 7

关于R语言的小问题

[复制链接]
发表于 2013-10-29 10:55:40 | 显示全部楼层 |阅读模式
刚接触R语言啊 ,略有点小白,希望指导{:soso_e100:}
        对于identical(0.9,1-0.1) 是true
为什么  identical(0.9,1.1-0.2) 就是false 呢

回复

使用道具 举报

发表于 2013-11-2 23:33:32 | 显示全部楼层
0.9=0.9
0.9!=0.8
回复

使用道具 举报

发表于 2013-11-3 22:29:10 来自手机 | 显示全部楼层
学习了,谢谢!
回复

使用道具 举报

 楼主| 发表于 2013-11-4 11:28:02 | 显示全部楼层
没明白,哪来的0.8?
回复

使用道具 举报

 楼主| 发表于 2013-11-4 11:28:45 | 显示全部楼层

没明白,哪来的0.8?都是0.9啊
回复

使用道具 举报

发表于 2013-11-9 18:07:22 | 显示全部楼层
本帖最后由 ccl 于 2013-11-9 21:07 编辑
大头健 发表于 2013-11-4 11:28
没明白,哪来的0.8?都是0.9啊

sorry,看错了!
identical用于比较精确相等,所以会出现 identical(0.9,1.1-0.2)为FALSE,因为计算机有舍入误差.
all.equal用于比较近似相等,all.equal(0.9,1.1-0.2) 为TRUE。


identical compares the internal representation of the data and returns
TRUE if the objects are strictly identical, and FALSE otherwise. all.equal
compares the "near equality" of two objects, and returns TRUE or display a
summary of the di erences. The latter function takes the approximation of
the computing process into account when comparing numeric values. The
comparison of numeric values on a computer is sometimes surprising!

                                                            ------《R for Beginners》
Only integers and fractions whose denominator is a power of 2 can be repre-
sented exactly with the floating point representation used for storing numbers
in digital computers (see Section 9.1 for more detail). All other numbers are
subject to rounding error. This necessary limitation has caused many heart-
aches.
             ------《introduction to scientific programming and simulation using R》
> 1-1/2==1/2
[1] TRUE
> 1-1/3==2/3
[1] FALSE





回复

使用道具 举报

发表于 2013-11-15 14:13:57 | 显示全部楼层
不知道啊,同求答案
回复

使用道具 举报

发表于 2013-12-9 23:30:42 | 显示全部楼层
应该是舍入误差造成的:二进制无法精确表示1.1。
试试:identical(0.9,round(1.1-0.2,1))
TRUE
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 10:33 , Processed in 0.022915 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表