原创

R语言中的浮点数

温馨提示:
本文最后更新于 2024年03月30日,已超过 50 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

背景

使用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

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

正文到此结束
本文目录