解决方案
在数值数学中,这是一个已知问题。因此,在所有编程语言中都可能出现这个情况。由于大多数浮点数没有二进制的精确表示,因此比较它们的相等性会得到不一致的结果。
浮点数在内部是以二进制近似值表示,但是在数学运算时经常都是以十进制来表示。在许多情况下,二进制数无法正确表示某个十进制数,因为会出现四舍五入法误差。例如,在LabVIEW 比较逻辑里:0.1 + 0.2 = 0.3为假,因为等式两边的二进制表示形式都可以执行为仅接近精确值的值(0.3000000000044),导致等式比较为假。
为避免这种情况,将比较逻辑与浮点值一起使用时,请使用以下方法之一:
- 比较“大于等于?”或“小于等于?”,而不是“等于”。
- 比较时要允许绝对误差(绝对ε)。
- 比较在相对误差内。
- 通过将数字转换为字符串,再进行比较。
- 使用整数进行比较。