Java run-off error(on float and double)
来源:互联网 发布:大数据魔镜 编辑:程序博客网 时间:2024/05/17 08:29
We can't store real 3.9 in Base 2.
double a = 3.9;boolean b = false;if(a == 3.9){ b = true;}System.out.println(b);
输出为:
false
(3.9)Base 10 = (1 1 . 1 1 1 00 1 1......)Base 2
2^1 2^0 2^-1 2^-2 2^-3 ... 2^-6 2^-7 ...
1/2 1/4 1/8 1/64 1/128
≈ 3 +0.8984375...
∴ We can not store real 3.9 in Base 2.
Example 1:
public class FloatingPointError {public static void main(String[] args) {double x = 3.9;double y = 3.8; double difference = x - y;System.out.println(difference);if (difference == 0.1) {System.out.println("I can do simple math.");} else {System.out.println("I am having trouble with easy problems.");}}}输出为:
0.10000000000000009I am having trouble with easy problems.
Example 2:
public class FloatingPointDoneRight {public static void main(String[] args) {double EPSILON = 0.00000000001;double x = 3.9;double y = 3.8;double difference = x - y;if (Math.abs(difference - 0.1) < EPSILON) {System.out.println("I can do simple math.");} else {System.out.println("I am having trouble with easy problems.");}}}输出为:
I can do simple math.
阅读全文