如何获得架构支持的最小的下一个或上一个可能的双精度值?
2022-09-04 01:09:09
假设我有一个变量。有没有办法获取CPU架构支持的下一个或上一个值。double
d
举个简单的例子,如果值为 10.1245125,并且体系结构的精度固定为 7 位小数,则下一个值将为 10.1245126,上一个值为 10.1245124。
显然,在浮点架构上,这并不那么简单。我如何能够实现这一点(在Java中)?
假设我有一个变量。有没有办法获取CPU架构支持的下一个或上一个值。double
d
举个简单的例子,如果值为 10.1245125,并且体系结构的精度固定为 7 位小数,则下一个值将为 10.1245126,上一个值为 10.1245124。
显然,在浮点架构上,这并不那么简单。我如何能够实现这一点(在Java中)?
实际上,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