首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加/减Math.ulp()与Math.nextAfter()

加/减Math.ulp()与Math.nextAfter()
EN

Stack Overflow用户
提问于 2017-11-14 11:51:06
回答 1查看 512关注 0票数 13

我试图更详细地理解Java中的浮点操作。如果我正确地阅读了文档,那么对于任何给定的双x,下面的内容都是正确的:

代码语言:javascript
复制
x - Math.ulp(x) == Math.nextAfter(x, Double.NEGATIVE_INFINITY);
x + Math.ulp(x) == Math.nextAfter(x, Double.POSITIVE_INFINITY);

问:这种情况总是这样吗?还是有些例外情况下的结果会有所不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 13:09:45

这个项目:

代码语言:javascript
复制
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));
  }
}

产出:

代码语言:javascript
复制
false
true

连续两倍之间的差异在每个正常整数幂为2(包括1.0 )时发生变化。其中一个测试必须失败,因为它假定存在恒定的差异。Math.ulp(双)被定义为返回“这个浮点值和二重值之间的正距离”,所以当距离不同时,减法命题是假的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47285129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档