gpt4 book ai didi

java - 为什么 Math.nextAfter(Double.MAX_VALUE, 1) 不等于 Double.INFINITY?

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:19 45 4
gpt4 key购买 nike

根据 the Javadoc :

public static double nextAfter(double start,
double direction)

...

  • If start is equal to ± Double.MAX_VALUE and direction has a value such that the result should have a larger magnitude, an infinity with same sign as start is returned.

但根据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?

最佳答案

文档具有误导性。

direction 参数需要大于 Double.MAX_VALUE 才能使返回值更大结果。

由于 1 较小,因此输出是 float 就在您提供的数字之前。

C++ 文档(在 IEEE754 下)更清晰,甚至明确说明了这种边缘情况:http://en.cppreference.com/w/cpp/numeric/math/nextafter

关于java - 为什么 Math.nextAfter(Double.MAX_VALUE, 1) 不等于 Double.INFINITY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44826539/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com