Сравнение разности двух вещественных чисел с третьим вещественным числом

У меня есть вещественные числа a, b и с. Нужно чтобы выполнялось выражение c == (b - a), проблема возникает именно с "равно". Думал использовать fabs((b - a) - c) < DBL_EPSILON, но не выходит.


Ответы (1 шт):

Автор решения: Danny
   // ..
    AreClose(b - a, c);
   // ...
    static bool AreClose(double value1, double value2)
    {
        //in case they are Infinities (then epsilon check does not work)
        if (value1 == value2) return true;
        // This computes (|value1-value2| / (|value1| + |value2| + 10.0)) < DBL_EPSILON
        double eps = (fabs(value1) + fabs(value2) + 10.0) * DBL_EPSILON;
        double delta = value1 - value2;
        return(-eps < delta) && (eps > delta);
    }
→ Ссылка