Libchecker:checker eq FPTYPE
From EjudgeWiki
Revision as of 10:47, 27 August 2008 by Cher (talk | contribs) (New page: Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/[[Libchecker:Функции|Фун...)
Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/Функции/Сравнение вещественных значений/Сравнение вещественных чисел с заданной относительной погрешностью
Данные функции позволяют сравнивать два вещественных числа на равенство с заданной относительной погрешностью.
int checker_eq_float(float v1, float v2, float eps); int checker_eq_double(double v1, double v2, double eps); int checker_eq_long_double(long double v1, long double v2, long double eps);
Параметр eps задаёт относительную погрешность и должен лежать в интервале (0, 1). Как правило, указывается значение eps, равное 10^{-n}. Параметры v1 и v2 задают значения для сравнения.
Сравнение ведется по следующим правилам в порядке их применения:
- если оба числа равны NaN, они считаются равными;
- если только одно число равно NaN, числа считаются различными;
- если оба числа равны Inf и имеют один знак, они считаются равными;
- если оба числа равны Inf, но имеют разный знак, либо только одно число равно Inf, числа считаются различными;
- если модули обоих чисел не превышают 1, и модуль разности между ними |v1 - v2| меньше значния 1.125*eps, числа считаются равными;
- если модули обоих чисел не превышают 1, и модуль разности между ними |v1 - v2| больше или равен значния 1.125*eps, числа считаются различными;
- если числа имеют разный знак, они считаются различными;
- если двоичные порядки чисел отличаются более чем на 1, числа считаются различными;
- из порядков обоих чисел вычитается минимальный порядок, таким образом, порядки чисел приводятся к значениям 0 или 1, если после этого модуль разности между ними |v1 - v2| меньше значния 1.125*eps, числа считаются равными;
- в противном случае числа считаются различными.
Таким образом, значение eps задаёт, сколько совпадающих десятичных знаков должны иметь два числа.
Функции возвращают 1, если два числа равны, и 0, если числа не равны.