如何获得架构支持的最小的下一个或上一个可能的双精度值?

2022-09-04 01:09:09

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

举个简单的例子,如果值为 10.1245125,并且体系结构的精度固定为 7 位小数,则下一个值将为 10.1245126,上一个值为 10.1245124。

显然,在浮点架构上,这并不那么简单。我如何能够实现这一点(在Java中)?


答案 1

实际上,IEEE 754浮点架构使这变得很容易:由于该标准,该函数在几乎所有支持它的语言中都紧随其后调用,并且这种统一性使我能够在对Java知之甚少的情况下编写您的问题的答案:

返回与第二个参数方向上的第一个参数相邻的浮点数。java.lang.Math.nextAfter(double start, double direction)

请记住,-无穷大和+无穷大是浮点值,这些值便于给出方向(第二个参数)。不要犯这样的常见错误,只要 1 大于 的 ULP,它才有效。Math.nextAfter(x, x+1)x

任何写上述内容的人都可能意味着相反,它保存了一个加法,并适用于 的所有值。Math.nextAfter(x, Double.POSITIVE_INFINITY)x


答案 2

Math.nextUpMath.nextDown可用于获取下一个/上一个元素,这些元素等效于接受答案中提出的方法,但更简洁。

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