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

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

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

阅读 3k
2 个回答

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

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

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

        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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题