Сравнение двойных значений на равенство в Java.

Я хотел бы получить совет от людей, которые имеют больше опыта работы с примитивомdouble равенство в Java. С помощьюd1 == d2 для двоихd1 а такжеd2 недостаточно из-за возможных ошибок округления.

Мои вопросы:

ЯваDouble.compare(d1,d2) == 0 обработка ошибок округления до некоторой степени? Как объяснено в1.7 документация это возвращает значение0 еслиd1 численно равноd2, Кто-нибудь уверен, что именно они подразумевают под численно равным?

Используя вычисление относительной ошибки для некоторого значения дельты, есть ли общее (не специфичное для приложения) значение дельты, которое вы бы порекомендовали? Пожалуйста, смотрите пример ниже.

Ниже приведена общая функция для проверки равенства с учетом относительной ошибки. Какая ценностьdelta Вы бы порекомендовали фиксировать большинство ошибок округления от простых операций +, -, /, *?

public static boolean isEqual(double d1, double d2) {
    return d1 == d2 || isRelativelyEqual(d1,d2);
}

private static boolean isRelativelyEqual(double d1, double d2) {
    return delta > Math.abs(d1- d2) / Math.max(Math.abs(d1), Math.abs(d2));
}

Ответы на вопрос(3)

Ваш ответ на вопрос