LabVIEW的数值比较逻辑不一致/有问题

更新 Oct 23, 2023

适用于

软件

  • LabVIEW
  • LabVIEW NXG

程式语言

  • Python
  • C++
  • Visual Basic .NET
  • C# .NET

问题详述

  • 我在LabVIEW使用浮点数值做比较。有时,比较逻辑得到的结果按预期执行,而有时候则不。
  • 我正在测量两方数据,直到测量两方数据达到相同的值。但是,有时比较逻辑无法识别两个值(测量值和代码中定义的停止值)是相等的。我无法理解为什么会发生此问题,甚至有时也只会看到一些情况发生此问题。

解决方案

在数值数学中,这是一个已知问题。因此,在所有编程语言中都可能出现这个情况。由于大多数浮点数没有二进制的精确表示,因此比较它们的相等性会得到不一致的结果。

浮点数在内部是以二进制近似值表示,但是在数学运算时经常都是以十进制来表示。在许多情况下,二进制数无法正确表示某个十进制数,因为会出现四舍五入法误差。例如,在LabVIEW 比较逻辑里:0.1 + 0.2 = 0.3为假,因为等式两边的二进制表示形式都可以执行为仅接近精确值的值(0.3000000000044),导致等式比较为假。


为避免这种情况,将比较逻辑与浮点值一起使用时,请使用以下方法之一:
  1. 比较“大于等于?”或“小于等于?”,而不是“等于”。
  2. 比较时要允许绝对误差(绝对ε)。
  3. 比较在相对误差内。
  4. 通过将数字转换为字符串,再进行比较。
  5. 使用整数进行比较。