为什么这个简单的比较是假的?

时间:2014-05-10 19:02:23

标签: r

为什么这个简单的陈述在R?

中评估为FALSE
mean(c(7.18, 7.13)) == 7.155

此外,为了使这个TRUE声明,我该怎么做?谢谢!

2 个答案:

答案 0 :(得分:3)

这可能是由于小的舍入误差造成的。四舍五入到小数点后三位表示它们相等:

round(mean(c(7.18, 7.13)), 3) == 7.155

通常,不要依靠数字比较来给出预期的逻辑输出:)

答案 1 :(得分:3)

浮点运算并不准确。 this question的答案有更多信息。

你实际上可以看到这个:

> print(mean(c(7.18,7.13)), digits=16)
[1] 7.154999999999999
> print(7.155, digits=16)
[1] 7.155

一般情况下,不要将浮点数比较为相等(这几乎适用于所有编程语言,而不仅仅是R)。

您可以使用all.equal进行不精确的比较:

> all.equal(mean(c(7.18,7.13)), 7.155)
[1] TRUE