背景
使用R语言计算
1 2
| > 0.6*7 - 0.7*6 [1] 8.881784e-16
|
出现了以上结果,本来结果应为0的。
原因
这实际上是电脑算法产生的细微误差,如果用”==”或者identical(),可以捕捉到这些细微误差。
1 2 3 4
| > 0.6*7 == 0.7*6 [1] FALSE > identical(0.6*7, 0.7*6) [1] FALSE
|
但如果我们需要忽略这些误差的时候,可以用“all.equal()”来避免这些令人尴尬的比较结果。
1 2
| > all.equal(0.6*7, 0.7*6) [1] TRUE
|
同样的例子还有如下。
1 2 3 4 5 6 7 8
| > 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
|
还有
1 2 3 4 5 6 7 8
| > 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
|
计算机的世界规则,可见一斑。