背景
使用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
计算机的世界规则,可见一斑。 |