浮動小数点値を「std::map」のキーとして安全に使用し、予期しない動作を回避するにはどうすればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-11-12 14:57:02
オリジナル
268 人が閲覧しました

How can you safely use floating point values as keys in `std::map` and avoid unexpected behavior?

std::map の浮動小数点キー: Epsilon との比較を回避する

std::map で double 型をキーとして使用すると、浮動小数点精度の問題が発生する可能性があります。イプシロンしきい値を使用した値の比較は一般的に使用されていますが、コンテナの順序付け要件に違反し、未定義の動作が発生する可能性があります。

これに対処するには、より安全なアプローチは、NaN 値を処理し、直接キーを回避するカスタム比較演算子を定義することです。比較。さらに、 std::multimap または std::multiset を使用すると、複数のキー値に対応できるため、予期しない動作のリスクが軽減されます。

二重キーを使用して近似検索を実行するには、ヘルパー関数を使用して範囲を返すことができます。ターゲット値に近い要素。イプシロン パラメータによって制御されます。この範囲を反復処理して、目的のキーが存在する場合はそれを見つけます。あるいは、範囲検索に基づいてキーの存在チェック関数を実装することもできます。

浮動小数点値を std::set または std::map のキーとして使用することは、一般に、浮動小数点値を使用することを避けることをお勧めします。エラー。より正確なインターフェイスからそれらを除外すると、予期しない値の比較によって引き起こされるバグのリスクを軽減できます。ただし、正確な順序が重要ではない、自動的にソートされたコレクションにこれらを使用すると、依然として有益な場合があります。

以上が浮動小数点値を「std::map」のキーとして安全に使用し、予期しない動作を回避するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート