Почему Math.nextAfter(Double.MAX_VALUE, 1) не равен Double.INFINITY?
Согласно Javadoc:
public static double nextAfter(double start,
double direction)
...
- Если начало равно ± Double.MAX_VALUE, а направление имеет такое значение, что результат должен иметь большую величину, возвращается бесконечность с тем же знаком, что и начало.
Но согласно этот пример:
System.out.println(Double.MAX_VALUE);
System.out.println(Math.nextAfter(Double.MAX_VALUE, 1));
System.out.println(Math.nextAfter(Double.MAX_VALUE, 1) == Double.POSITIVE_INFINITY);
Вывод:
1.7976931348623157E308
1.7976931348623155E308
false
А? Это не только Double.POSITIVE_INFINITY
, но и меньше по величине.
...157E308
...155E308
Я просто полностью неправильно читаю Javadoc?
Ответы
Ответ 1
Документы вводят в заблуждение.
Параметр направления должен быть больше Double.MAX_VALUE
, чтобы возвращаемое значение получило больший результат.
Поскольку 1 меньше, вывод - это число с плавающей запятой непосредственно перед тем, которое вы предоставляете.
Документы С++ (в соответствии с IEEE754) более ясны и даже явно раскрывают этот регистр: http://en.cppreference.com/w/cpp/numeric/math/nextafter