2017-02-22 49 views

回答

1

这是由于二进制浮点不能很好地转换为十进制表示的事实。假设64位IEEE754浮点:

最接近浮点数〜0.1是0.1000000000000000055511151231257827021181583404541015625

最接近浮点数至10.1是 10.0999999999999996447286321199499070644378662109375

可以看到,小数部分基本上是不同的,所以确切的比较必然会失败。

在这里很难提出补救措施,因为这很大程度上取决于您的特定使用情况。 (Instinct向我暗示,你可以比较1e-13的附加容差)。

+0

作为此附件,您可以舍入到小数点后1位以避免此不等式'0.1 %% 1 == round(10.1 %% 1,1)'为TRUE。 –

+2

'all.equal'也将显示这些值相等。 –