生信人

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

0

听众

11

主题
发表于 2024-3-12 18:15:10 | 查看: 95| 回复: 0

背景

使用R语言计算

> 0.6*7 - 0.7*6
[1] 8.881784e-16

出现了以上结果,本来结果应为0的。

原因

这实际上是电脑算法产生的细微误差,如果用"=="或者identical(),可以捕捉到这些细微误差。

> 0.6*7 == 0.7*6
[1] FALSE
> identical(0.6*7, 0.7*6)
[1] FALSE

但如果我们需要忽略这些误差的时候,可以用“all.equal()”来避免这些令人尴尬的比较结果。

> all.equal(0.6*7, 0.7*6)
[1] TRUE

同样的例子还有如下。

> sqrt(2) ^ 2 - 2
[1] 4.440892e-16
> sqrt(2) ^ 2 == 2
[1] FALSE
> identical(sqrt(2) ^ 2, 2)
[1] FALSE
> all.equal(sqrt(2) ^ 2, 2)
[1] TRUE

还有

> 2.2e-2 - 2.2 * 10 ^ (-2)
[1] -3.469447e-18
> 2.2e-2 == 2.2 * 10 ^ (-2)
[1] FALSE
> identical(2.2e-2, 2.2 * 10 ^ (-2))
[1] FALSE
> all.equal(2.2e-2, 2.2 * 10 ^ (-2))
[1] TRUE

计算机的世界规则,可见一斑。

收藏回复 显示全部楼层 道具 举报

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

QQ|Archiver|手机版|小黑屋|生信人

GMT+8, 2024-5-5 21:18 , Processed in 0.056233 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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