Не существует общего решения для сравнения чисел с плавающей запятой, которые содержат ошибки предыдущих операций. Код, который должен использоваться, зависит от приложения. Поэтому, чтобы получить правильный ответ, вы должны описать свою ситуацию более конкретно.
Основная проблема заключается в том, что выполнение правильных вычислений с использованием неверных данных в общем случае невозможно. Если вы хотите вычислить некоторую функцию из двух точных математических значений x и y , но единственные данные, которые у вас есть, это некоторые неточно вычисленные значения x
и y
, это обычно невозможно вычислить точно правильный результат. Например, предположим, что вы хотите знать, какова сумма x + y , но вы знаете только, что x
равно 3, а y
равно 4, но вы не знаете знать, что такое истинные, точные x и y . Тогда вы не можете вычислить x + y .
Если вы знаете, что x
и y
равны приблизительно x и y , тогда вы можете вычислить приближение x + y, добавив x
и y
. Срабатывает, когда вычисляемая функция (+
в этом примере) имеет разумную производную: незначительное изменение входных данных функции с разумной производной слегка меняет ее выходные данные. Это терпит неудачу, когда функция, которую вы хотите вычислить, имеет разрыв или большую производную. Например, если вы хотите вычислить квадратный корень из x (в реальной области), используя приближение x
, но x
может быть отрицательным из-за предыдущих ошибок округления, тогда вычисление sqrt(x)
может произвести исключение. Аналогично, сравнение неравенства или порядка является прерывистой функцией: незначительное изменение входных данных может полностью изменить ответ (с ложного на истинное или наоборот).
Обычный плохой совет - сравнивать с «толерантностью». Этот метод обменивает ложные отрицания (неправильные отклонения чисел, которые удовлетворяли бы сравнению, если сравнивались точные математические значения) для ложных положительных результатов (неправильное принятие чисел, которые не удовлетворяли бы сравнению).
Может ли применимое лицо терпеть ложное принятие, зависит от приложения. Следовательно, общего решения не существует.
Уровень допуска к установке и даже характер, по которому он рассчитывается, зависят от данных, ошибок и предыдущих вычислений. Таким образом, даже если допустимо сравнивать с допуском, количество допусков для использования и способ его расчета зависят от приложения. Там нет общего решения.