首頁 > 後端開發 > C++ > 如何將'std::map”與浮點鍵一起使用:比較不準確的解決方案?

如何將'std::map”與浮點鍵一起使用:比較不準確的解決方案?

DDD
發布: 2024-11-14 22:15:03
原創
655 人瀏覽過

How to Use `std::map` with Floating-Point Keys: A Solution for Inaccurate Comparisons?

std::map 浮點鍵比較

使用浮點值作為std::map 中的鍵可能會帶來挑戰,因為浮點運算固有的不精確性。一個常見問題是,使用嚴格相等 (==) 比較浮點鍵可能不會總是按預期工作,因為即使看似精確的值也可能由於精度錯誤而不匹配。

在給定的程式碼範例中,循環嘗試在std::map 中尋找鍵3.0,但失敗,因為循環使用= 0.1 遞增搜尋鍵,由於浮點精度不準確,這可能與預期鍵值不精確匹配。

要解決此問題,您可以在程式中使用 std::set precision 函數來指定比較鍵時要考慮的小數位數。但是,這種方法仍然不可靠,因為它不能保證鍵能夠精確比較。

更好的解決方案是在 std::map 中使用近似比較函數。您可以定義一個自訂比較器,使用 epsilon 閾值來確定鍵相等性。這允許您在一定容差內比較鍵,有效地忽略微小的精度差異:

struct fuzzy_double_comparator {
    bool operator() (const double a, const double b) const {
        return std::fabs(a - b) < epsilon;
    }
};
登入後複製

然後可以將此比較器函數傳遞給std::map 構造函數以使用近似比較:

std::map<double, double, fuzzy_double_comparator> mymap;
登入後複製

透過這種方法,您可以在std::map 中找到鍵3.0,即使它的實際值由於浮點精度限製而略有不同。

以上是如何將'std::map”與浮點鍵一起使用:比較不準確的解決方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板