LabVIEWの予期しないまたは一貫性のない数値比較ロジック

更新しました Jan 22, 2024

使用製品

ソフトウェア

  • LabVIEW

オペレーティング・システム

  • Windows

問題

  • LabVIEWで浮動小数点数値を比較しています。ロジックが期待どおりに実行される場合もあれば、期待どおりに実行されない場合もあります。
  • 一定の値が測定されるまでデータを測定しています。ただし、比較関数が両方の値 (測定値とコードで定義された停止値) が等しいことを認識しない場合があります。なぜこの問題が発生するのか、またなぜそれが時々しか発生しないのかを理解するのが困難です。

解決策

これは数値数学における既知の問題で、すべてのプログラミング言語で発生されます。ほとんどの浮動小数点数は 2 進数で正確に表現できないため、それらが等しいかどうかを比較すると予期しない結果が生じる可能性があります。


 浮動小数点数は内部的に 2 進数の近似として表現されるため、値の外側の小数点以下の桁で小さな丸め誤差が発生します。このため、10 進数表記では正確である計算が 2 進数では正確ではないことがよくあります。たとえば、コンピュータは 0.1 + 0.2 = 0.3 を false として比較することがよくあります。これは、方程式の両辺のバイナリ表現が、たとえば 0.3000000000044 (またはマシンとコンパイル順序に応じて、同様の四捨五入の任意の数のバリアント) のような正確な値に近い値にしか実行できないため、等価性は false になります。



これを回避するには、浮動小数点値の比較ロジックを使用するときに、次のいずれかの方法を使用します。
  • 「等しい」の代わりに「以上」または「以下」を比較します。
  • 絶対差(絶対イプシロン)を許容して比較します。
  • 相対イプシロン内で比較します。
  • 数値を文字列に変換することで、指定された桁の精度内で比較します。
  • 整数を使用して比較します。