向量<double>在容差水平内查找双精度

vector<double> find double within tolerance level

本文关键字:水平 查找 双精度 lt double gt 向量      更新时间:2023-10-16

我有一个

std::vector<double> v;

我想检测其中是否存在一个真实的值,直到一个容错级别,比如

 1e-6;

文档说明operator==用于查找容器中存在的值。

如何生成双精度对象所需的行为?

您不能使用普通的find来使用自定义比较器进行搜索-您需要使用find_if来代替。你已经有了c++ 11的答案,下面是c++ 03的答案:

struct dbl_cmp {
    dbl_cmp(double v, double d) : val(v), delta(d) { }
    inline bool operator()(const double &x) const {
        return abs(x-val) < delta;
    }
private:
    double val, delta;
};
...
find_if(v.begin(), v.end(), dbl_cmp(10.5, 1E-8));

您可以这样处理。

double a=3.14;  // The value you seek
std::find_if(v.begin(),v.end(),[a](double b) { return abs(a - b) < epsilon; });

使用浮点数的人可能有比我在这里提供的更好的等价比较方法。