0

私は2つのベクトルを持っています:

std::vector<double> calculatedValues = calculateValues();
std::vector<double> expectedValues = {1.1, 1.2};

これらのベクトルが等しいかどうかを確認するためにcputestを使用しています。

CHECK_TRUE(calculatedValues == expectedValues)

これは機能しています。ただ、やはりdoublesを比較しているので、ある程度の許容範囲を使用すべきではないかどうか疑問に思っています。

4

3 に答える 3

3

代わりに、カスタムepsilonoperator==を使用できます。std::equal()

bool equal = std::equal(calculatedValues.begin(), calculatedValues.end(), expectedValues.begin(),
                        [](double value1, double value2)
                        {
                            constexpr double epsilon = 0.01; // Choose whatever you need here
                            return std::fabs(value1 - value2) < epsilon;
                        });
CHECK_TRUE(equal);
于 2016-03-06T18:06:38.853 に答える
2

浮動小数点値を比較するには、次のようにする必要があります。

bool is_equal(double a, double b) {

    return (abs(a-b)/b < 0.0001); // 0.00001 value can be a relative value
}

ベクトルを比較するように適応させることができます。

于 2016-02-08T10:35:13.763 に答える