如何获得架构支持的最小的 next 或 previous 可能的 double 值?

How to get the smallest next or previous possible double value supported by the architecture?

假设我有一个 double 变量 d。有没有办法获取 CPU 架构支持的下一个或上一个值。

作为一个简单的例子,如果值为 10.1245125 并且架构的精度固定为小数点后 7 位,那么下一个值将是 10.1245126,而前一个值将是 10.1245124。

显然在浮点架构上这不是那么简单。我怎样才能做到这一点(在 Java 中)?

实际上,IEEE 754 浮点架构使这变得简单:由于标准,该函数在几乎所有支持它的语言中都被称为 nextafter,这种统一性使我能够写一个答案你的问题对 Java:

不太熟悉

The java.lang.Math.nextAfter(double start, double direction) returns the floating-point number adjacent to the first argument in the direction of the second argument.

记住 -infinity 和 +infinity 是浮点值,这些值方便给出方向(第二个参数)。不要犯写类似 Math.nextAfter(x, x+1) 的常见错误,只要 1 大于 x.

ULP,它就有效

写以上内容的人可能意思是 Math.nextAfter(x, Double.POSITIVE_INFINITY),这节省了一个加法并适用于 x 的所有值。

Math.nextUp and Math.nextDown可以用来获取next/previous元素,等价于接受答案中建议的方法,但更简洁。

(此信息最初由@BjörnZurmaar 作为评论提供)