首页 > 后端开发 > C++ > 如何将'std::map”与浮点键一起使用:比较不准确的解决方案?

如何将'std::map”与浮点键一起使用:比较不准确的解决方案?

DDD
发布: 2024-11-14 22:15:03
原创
651 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板