ホームページ >バックエンド開発 >C++ >浮動小数点数が等しいかどうかを比較するにはどうすればよいですか?

浮動小数点数が等しいかどうかを比較するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-06 01:09:38390ブラウズ

How Should I Compare Floating-Point Numbers for Equality and Inequality?

Double.Epsilon を使用した浮動小数点数の等価性の決定

MSDN ドキュメントでは、Double.Epsilon 定数より大きい値を使用して確立することを推奨しています。 2 つの浮動小数点数が等しいとみなせるかどうかを判断する際に許容される差の絶対マージン。ただし、この推奨事項は混乱を引き起こします。

Double.Epsilon は比較で実際に使用できますか?

MSDN の文言は、Double の実際の使用法についての誤解を引き起こしています。イプシロン。提供された回答に記載されているように、Double.Epsilon は、0 ではない、表現可能な最小の非非正規浮動小数点値を表します。これは、単に切り捨て誤差の最小サイズを示しているだけであり、比較に許容できるマージンではありません。

等価比較に適したイプシロンの計算

等価比較の場合、より実用的なアプローチ比較される値の大きさに基づいてイプシロンを使用することです。例:

public static bool AboutEqual(double x, double y) {
    double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
    return Math.Abs(x - y) <= epsilon;
}

このメソッドは、2 つの数値の絶対値の大きい方に小さな定数 (1E-15) を掛けて、比較の許容マージンを決定します。

「より大きい」と「より小さい」の比較を検討する

「より大きい」または「より大きい」などの比較の場合それ未満の場合も同じ原則が適用されます。イプシロンは、潜在的な切り捨て誤差を考慮して、比較される数値の大きさに基づいて計算する必要があります。

等価比較と不等式比較に最適な実装

要約すると、Double .Epsilon は、等号、より大きい、より小さい、以下、または以上、または以上の許容マージンとして直接使用することはできません。浮動小数点数の比較に等しい。代わりに、正確な比較を保証するために、コンテキスト固有のイプシロンを計算する必要があります。

以上が浮動小数点数が等しいかどうかを比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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