Нахождение наименьшего двойного больше, чем в Java - PullRequest
0 голосов
/ 30 апреля 2018

Есть ли встроенный метод для поиска следующего наибольшего двойного числа в Java?

При написании теста я иногда хочу убедиться, что операция выполняется успешно для x, но не для значений, превышающих x. Один из способов сделать это - показать, что операции не выполняются для x + eps. Но eps должен быть выбран с учетом значения x, чтобы избежать таких проблем, как 180 + 1e-15 == 180.

Чтобы автоматически выбрать eps, я бы хотел найти наименьшее представимое число больше x. Я был удивлен, что не нашел стандартного библиотечного метода, поэтому написал следующее:

public static double nextDouble(double d) {
    if (d < 0) {
        return -prevDouble(Math.abs(d));
    } else {
        return Double.longBitsToDouble(Double.doubleToLongBits(d) + 1);
    }
}

public static double prevDouble(double d) {
    if (d < 0) {
        return -nextDouble(-d);
    } else {
        return Double.longBitsToDouble(Double.doubleToLongBits(d) - 1);
    }
}

Должен ли я использовать эти пользовательские функции или есть встроенный подход?

1 Ответ

0 голосов
/ 30 апреля 2018

Существует метод Math.nextUp .

Возвращает значение с плавающей точкой рядом с d в направлении положительной бесконечности.

Есть перегрузки для принятия double и float. Существуют также соответствующие Math.nextDown методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...