我试图更详细地理解Java中的浮点操作。如果我正确地阅读了文档,那么对于任何给定的双x,下面的内容都是正确的:
x - Math.ulp(x) == Math.nextAfter(x, Double.NEGATIVE_INFINITY);
x + Math.ulp(x) == Math.nextAfter(x, Double.POSITIVE_INFINITY);问:这种情况总是这样吗?还是有些例外情况下的结果会有所不同?
发布于 2017-11-14 13:09:45
这个项目:
public class Test {
public static void main(String[] args) {
double x = 1;
System.out.println(x - Math.ulp(x) == Math.nextAfter(x, Double.NEGATIVE_INFINITY));
System.out.println(x + Math.ulp(x) == Math.nextAfter(x, Double.POSITIVE_INFINITY));
}
}产出:
false
true连续两倍之间的差异在每个正常整数幂为2(包括1.0 )时发生变化。其中一个测试必须失败,因为它假定存在恒定的差异。Math.ulp(双)被定义为返回“这个浮点值和二重值之间的正距离”,所以当距离不同时,减法命题是假的。
https://stackoverflow.com/questions/47285129
复制相似问题