这一系列陈述中的最后一个陈述是否对其他人有逻辑意义? 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
答案 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))