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.10000000000000009
I 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.