什么时候可以直接比较浮点数?

发布于 2022-09-07 19:57:48 字数 395 浏览 23 评论 0

Coursera 算法课中有一份材料(FAQ第八个问题)提到了该课程项目中可以直接比较浮点数,具体情况这样的:
输入的整数ab的取值范围为[-32,767, 32,767],直接比较浮点数a1/b1a2/b2能够得出正确的答案。原因是IEEE-754规定了浮点数预算的结果使用临近值表示。

但我还是不大清楚,为什么使用临近值表示运算结果就能够直接比较?虽然直接比较浮点数不是一个好习惯,但是还是想请问什么情况下能够直接比较浮点数?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

っ〆星空下的拥抱 2022-09-14 19:57:48

因为这个范围内的任何两个数相除得到的结果中,误差最小的也比浮点数的精度要大。

小镇女孩 2022-09-14 19:57:48

浮点数还分直接比较和间接比较?

比如这样,怎么比都相等:

        Float f1 = 0.01f;
        Float f2 = 0.09f;
        Float f3 = 0.1f;

        System.out.println(f3 == (f1 + f2)); // true
        System.out.println(f3.compareTo(f1 + f2)); // 0
        System.out.println(f3.equals(f1 + f2)); // true

再换成Double,怎么比都不相等:

        Double d1 = 0.01d;
        Double d2 = 0.09d;
        Double d3 = 0.1d;

        System.out.println(d3 == (d1 + d2)); // false
        System.out.println(d3.compareTo(d1 + d2)); // -1
        System.out.println(d3.equals(d1 + d2)); // false
        System.out.println(Math.abs(d3 - (d1 + d2)) < Double.MIN_EXPONENT); // false
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文