先看这样的例子:
然后会发现,问题简化之后,变成:
89.96+0.02==89.98
为什么结果是FALSE
看一下两种形式在R里存储的情况:
然后,会发现其实计算机在计算小数时,跟我们的直觉是不同的,应该是在计算 89.96+0.02,89.96被转化成另一种形式的数据,0.02也是,在计算后,再转化成十进制的数,变成89.98,当然这个89.98是一个约数。
而直接对89.98进行转化,得到的结果并不一定与89.96+0.02计算的结果完全一致,但精度是得到保证的。
在判断时,用all.equal会好一些。
这个得到的结果是TRUE。