ホームページ >バックエンド開発 >C++ >浮動小数点の等価性は信頼できるのでしょうか?

浮動小数点の等価性は信頼できるのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 21:17:02312ブラウズ

Is Floating-Point Equality Ever Reliable?

浮動小数点の等価性の複雑なケース

ソフトウェア開発の領域では、浮動小数点の比較のトピックが無数の議論を引き起こしてきました。 。浮動小数点の精度が等しいかどうかを判断する際に課題があることは広く知られていますが、== の使用が想定されているほど問題にならないシナリオもまだあります。

ここで挙げた具体的なコード例を詳しく見てみましょう。

// Defined in somewhere.h
static const double BAR = 3.14;

// Code elsewhere.cpp
void foo(double d)
{
    if (d == BAR)
        ...
}

この比較が有効となる状況があるかどうかという疑問が生じます。答えは、浮動小数点データ表現の基本的な性質にあります。

浮動小数点演算の一般的な標準である IEEE 754 は、浮動小数点として格納される場合、特定の範囲内の整数表現が正確であることを保証します。言い換えれば、0.0 を含む整数は、精度エラーを心配することなく == を使用して直接比較できます。

したがって、指定されたコードでは、BAR が float の範囲内の整数値で初期化されている限り、 、比較 d == BAR は安全で信頼性があります。

ただし、数学的演算や計算が行われた変数を扱う場合、状況はより複雑になります。一部の計算では正確な整数値が得られる場合がありますが、他の計算では浮動小数点数の等価性を無効にする丸め誤差が発生する場合があります。

同様に、foo(BAR) 呼び出しは、BAR が実際に整数定数であると仮定して、常に等しいと比較されます。これは、両方の変数が同じ静的定数を使用しており、その定数が同じ基礎となる整数値を表すことが保証されているためです。

結論として、浮動小数点の等価性は一般に注意して扱う必要がありますが、特定のシナリオではそれが可能となる場合があります。安心してご使用いただけます。浮動小数点の範囲内の整数値を比較する場合、または静的定数を使用する場合、プログラマは浮動小数点表現の正確な性質を利用して、信頼性の高い等価性チェックを実行できます。

以上が浮動小数点の等価性は信頼できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。