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,而相同整數運算會生成所需結果。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP