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中文網其他相關文章!