Coursera 算法課中有一份材料(FAQ第八個問題)提到了該課程項目中可以直接比較浮點數(shù),具體情況這樣的:輸入的整數(shù)a和b的取值范圍為[-32,767, 32,767],直接比較浮點數(shù)a1/b1與a2/b2能夠得出正確的答案。原因是IEEE-754規(guī)定了浮點數(shù)預(yù)算的結(jié)果使用臨近值表示。
但我還是不大清楚,為什么使用臨近值表示運算結(jié)果就能夠直接比較?雖然直接比較浮點數(shù)不是一個好習(xí)慣,但是還是想請問什么情況下能夠直接比較浮點數(shù)?
2 回答

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超3個贊
浮點數(shù)還分直接比較和間接比較?
比如這樣,怎么比都相等:
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
添加回答
舉報
0/150
提交
取消