Libchecker:checker eq FPTYPE abs

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/Функции/Сравнение вещественных значений/Сравнение вещественных чисел с заданной абсолютной погрешностью

Данные функции позволяют сравнивать два вещественных числа на равенство с заданной абсолютной погрешностью.

int checker_eq_float_abs(float v1, float v2, float eps);
int checker_eq_double_abs(double v1, double v2, double eps);
int checker_eq_long_double_abs(long double v1, long double v2, long double eps);

Параметр eps задаёт абсолютную погрешность и должен быть больше 0. Как правило, указывается значение eps, равное 10^{-n}. Параметры v1 и v2 задают значения для сравнения.

Сравнение ведется по следующим правилам в порядке их применения:

  • если оба числа равны NaN, они считаются равными;
  • если только одно число равно NaN, числа считаются различными;
  • если оба числа равны Inf и имеют один знак, они считаются равными;
  • если оба числа равны Inf, но имеют разный знак, либо только одно число равно Inf, числа считаются различными;
  • если модуль разности чисел |v1 - v2| меньше значния 1.125*eps, числа считаются равными, а в противном случае различными.

Константа 1.125 (9/8) выбрана потому, что она незначительно больше 1 и точно представима в двоичной системе счисления.

Функции возвращают 1, если два числа равны, и 0, если числа не равны.