1

CppUnitで境界テストを実装しようとしています。制限値自体と、この制限の周囲の境界を確認したいと思います。

上限には、可能な限り最小のインクリメントを追加したいと思いました。この増分についてdoubleは、でアクセスできます

numeric_limits<double>::epsilon()

ただし、イプシロンを制限に追加すると、結果としてNot-a-Number(NaN)が得られます。

#include <stdio.h>
#include <iostream>
#include <limits>
#include <math.h>

using namespace std;

const double WARNING_LIMIT = 8000.0;

int main(void) {

double warningLowerLimit = WARNING_LIMIT - numeric_limits<double>::epsilon();

if(warningLowerLimit < WARNING_LIMIT ) {
    cout << "lower" << endl;
}
else if (warningLowerLimit > WARNING_LIMIT) {
    cout << "upper" << endl;
}
else if ( fabs(warningLowerLimit) < 0.001) {
    cout << "same" << endl;
}
else {
    cout << "NaN" << endl; // <-- result
}

}

誰かが私に説明してもらえますか、なぜ結果が制限を下回らないのですか?

よろしくお願いします

4

1 に答える 1

0
else if ( fabs(warningLowerLimit) < 0.001) {
    cout << "same" << endl;
}

そうあるべき

fabs(warningLowerLimit - WARNING_LIMIT)

そこの。違いを確認せずに、たとえばcout << "NaN"ifに到達します。warningLowerLimit == WARNING_LIMIT

于 2013-02-18T16:04:09.297 に答える