作者:天崖人B | 来源:互联网 | 2023-01-30 20:13
根据Javadoc:
public static double nextAfter(double start,
double direction)
...
如果start等于±Double.MAX_VALUE并且direction具有一个值,使得结果应该具有更大的幅度,则返回具有与start相同的符号的无穷大.
但根据这个例子:
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> Bathsheba..:
这些文档具有误导性.
的方向参数需要是更大的比Double.MAX_VALUE
为返回值具有较大的结果.
由于1较小,因此输出是您提供的浮点数之前的浮点数.
C++的文档(下IEEE754)更清晰,甚至明确说明这一边缘情况:http://en.cppreference.com/w/cpp/numeric/math/nextafter