Подтвердить что ты не робот

Сравнение Java

Существуют ли какие-либо java-библиотеки для двойного сравнения? например.

public static boolean greaterThanOrEqual(double a, double b, double epsilon){
     return a - b > -epsilon;
}

Каждый проект, который я запускаю, в конечном итоге перепрограммировал это и скопировал код и проверил.

NB - хороший пример того, почему лучше использовать сторонние JAR-серверы - IBM рекомендует следующее:

"Если вы не знаете масштаб базовых измерений, используйте тест" abs (a/b - 1) < epsilon ", вероятно, будет более надежным, чем просто сравнивая разницу"

Я сомневаюсь, что многие люди подумали об этом и проиллюстрируют, что даже простой код может быть субоптимальным.

4b9b3361

Ответ 2

В стандартной библиотеке Java нет методов для решения вашей проблемы. Я предлагаю вам следовать ссылке Joachim и использовать эту библиотеку, которая подходит для ваших нужд, хотя мое предложение было бы создать библиотеку utils, в которой вы мог бы добавить часто используемые методы, как тот, который вы указали в своем вопросе, а также для различных вариантов реализации вашей проблемы вы должны рассмотреть вопрос:

Java double сравнения epsilon

Не стесняйтесь задавать любые другие двусмысленности

Ответ 3

Вы должны воздерживаться от любой библиотеки, использующей наивный подход "максимальной абсолютной разницы" (например, Guava). Как подробно описано в статье Брюса Доусона, Сравнивая числа с плавающей запятой, издание 2012 года, оно сильно подвержено ошибкам, поскольку оно работает только в очень ограниченном диапазоне значений. Гораздо более надежный подход заключается в использовании относительных различий или ULP для приблизительных сравнений.

Единственная библиотека, которую я знаю, реализует правильный примерный алгоритм сравнения apache.common.math.