这个问题已经在这里有了答案:




已关闭8年。






以下表达式的值为0.1,认为大于0.1。

> round(1740/600,0) - 1740/600
[1] 0.1
> (round(1740/600,0) - 1740/600) <= 0.1
[1] FALSE //???!!???
> (round(1740/600,0) - 1740/600) <= 0.1000000000000000000000000000000000000001
[1] TRUE

认为问题可能是由于四舍五入造成的,因此我尝试了以下相同的结果:
> 3 - 2.9
[1] 0.1
> (3 - 2.9) <=0.1
[1] FALSE

那么,有什么好处,又如何在不混淆临界值的情况下进行修复?

最佳答案

Floating-Point Guide:

09-28 10:51