根据the Javadoc:
public static double nextAfter(double start, double direction)
...
- 如果start等于±Double.MAX_VALUE并且direction的值使得结果的幅度更大,则返回与start相同的无穷大。
但根据this example:
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?
答案 0 :(得分:12)
文档具有误导性。
direction 参数需要更大而不是Double.MAX_VALUE
,以使返回的值具有更大的结果。
由于1较小,因此输出是您提供的之前的浮点数。
C ++文档(在IEEE754下)更清晰,甚至明确地说明了这个边缘情况:http://en.cppreference.com/w/cpp/numeric/math/nextafter