2

したがって、2つのdouble変数があり、小数点以下3桁まで比較したいと思います。したがって、変数の場合(たとえば):

double x = 0.695999;
double y = 0.695111;

(x == y)をチェックすると、trueが返されるはずです(どちらも小数点以下3桁まで等しいため)。ありがとう!

4

2 に答える 2

7

整数の比較と切り捨てを(乱用)使用できます。

int is_equal_3decplaces(double a, double b) {
    long long ai = a * 1000;
    long long bi = b * 1000;
    return ai == bi;
}

@DavidRFのベンチマークが示しているように、このソリューションでは、絶対値の計算と比較して、パフォーマンスがわずかに(〜40%)向上しています。

于 2013-03-03T07:54:25.093 に答える
4

小数点以下3桁を常にチェックする必要がない限り、実際には、事前に構成可能な小さなデルタよりも小さい差をチェックする必要があります。例えば:

#define epsilon ((double)0.000999)
bool is_approximately_equal(double x, double y)
{
        return (abs(x - y) < epsilon);
}

C ++のabsには、double用のabsのバージョンがあることに注意してください。Cでは、-ve値を使用して何かを行う必要があります。

于 2013-03-03T07:59:20.423 に答える