乐趣区

关于程序员:R语言踩坑丨浮点数间慎用比较

浮点数间慎用比拟

在 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 多平台公布

退出移动版