Java 浮點運算子和結合性


以下程式展示瞭如果使用浮點變數使用整數,那麼浮點運算會產生令人困惑的結果。

示例

public class Tester {
   public static void main(String[] args) {

      float a = 500000000;
      float b = -500000000;
      float c = 1;
      float sumabc1 = a+(b+c);
      float sumabc2 =(a+b)+c;

      System.out.println("Floating Point Arithmetic");
      System.out.println("a + ( b + c ) : " + sumabc1);
      System.out.println("(a + b) + c : " + sumabc2);

      float sumbc = b + c;
      float sumab = a + b;

      System.out.println("b + c : " + sumbc);
      System.out.println("a + b : " + sumab);

      int a1 = 500000000;
      int b1 = -500000000;
      int c1 = 1;

      int sumabc11 = a1+(b1+c1);
      int sumabc21 =(a1+b1)+c1;

      System.out.println("Integer Arithmetic");
      System.out.println("a + ( b + c ) : " + sumabc11);
      System.out.println("(a + b) + c : " + sumabc21);

      int sumbc1 = b1 + c1;
      int sumab1 = a1 + b1;

      System.out.println("b + c : " + sumbc1);
      System.out.println("a + b : " + sumab1);
   }
}

輸出

Floating Point Arithmetic
a + ( b + c ) : 0.0
(a + b) + c : 1.0
b + c : -5.0E8
a + b : 0.0
Integer Arithmetic
a + ( b + c ) : 1
(a + b) + c : 1
b + c : -499999999
a + b : 0

在這裡,我們可以看到 a + ( b + c ) 不等於(a + b) + c,因為這是浮點運算。

之所以會出現這種情況,是因為浮點運算會舍入結果。b + c 產生的是 -500000000,而不是 -499999999,而如果在整數運算中,會產生預期結果。

更新於: 21-Jun-2020

462 次瀏覽

開啟您的職業生涯

完成該課程即可獲得認證

開始操作
廣告