浮点数间慎用比拟
在 R 语言中,输出一个简略的计算题:0.3-0.7+0.4
,失去的后果是5.551115e-17
,而随机叫一个小学二年级的同学来口算,这个题答案等于 0,然而 R 语言不这么认为!
> 0.3-0.7+0.4
[1] 5.551115e-17
> 0.3-0.7+0.4 == 0
[1] FALSE
以上就是一个典型的浮点数计算精确性有余案例,上述情况呈现的起因是浮点数计算的精确性问题。
在计算机中,浮点数的存储和计算都有肯定的误差,因而在进行浮点数计算时,可能会呈现一些意外的后果。
谬误起因
在本例中,0.3、0.7 和 0.4 都是浮点数,它们在计算机中的存储和精度都有肯定误差。
当计算 0.3-0.7+0.4 时,因为浮点数计算的误差,后果并不是准确的 0,而是一个十分靠近 0 的数,即 5.551115e-17。
这种浮点数计算误差可能会导致比拟操作的后果不精确。在本例中,因为 5.551115e-17 不等于 0,因而比拟操作的后果为 FALSE。
这种误差可能会对程序的正确性产生影响,因而应该 尽量避免应用浮点数进行比拟。
本文由 mdnice 多平台公布