如何获得架构支持的最小的 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 作为评论提供)
假设我有一个 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
.
写以上内容的人可能意思是 Math.nextAfter(x, Double.POSITIVE_INFINITY)
,这节省了一个加法并适用于 x
的所有值。
Math.nextUp and Math.nextDown可以用来获取next/previous元素,等价于接受答案中建议的方法,但更简洁。
(此信息最初由@BjörnZurmaar 作为评论提供)