关于小数总和的逻辑

时间:2014-06-30 17:16:39

标签: r logic equals

这一系列陈述中的最后一个陈述是否对其他人有逻辑意义? R似乎在1下可能的小数和的一小部分给出类似的结果。我不记得任何基本的数学原理会使这成为真,但似乎不太可能是错误。

> 0.4+0.6
[1] 1
> 0.4+0.6==1.0
[1] TRUE
> 0.3+0.6
[1] 0.9
> 0.3+0.6==0.9
[1] FALSE

2 个答案:

答案 0 :(得分:1)

尝试在我的系统上键入0.3+0.6-0.9,结果为-1.110223e-16这是因为计算机实际上并不将它们作为十进制数加起来,它存储二进制近似值,并对它们求和。并且这些数字中没有一个可以用二进制来精确表示,因此计算中存在少量误差,显然它在第一个中不够重要,而在第二个中不重要。

答案 1 :(得分:1)

Floating point arithmetic is not exact,但是==运营商是。使用all.equal比较R中的两个浮点值。

isTRUE(all.equal(0.3+0.6, 0.9))

您还可以在调用all.equals时定义容差。

isTRUE(all.equal(0.3+0.6, 0.9, tolerance = 0.001))