学习《计算机组成原理》的时候,就已经学习过浮点数的加减乘数运算。若在计算机内部采用IEEE754格式来存储浮点数数据的话,每次计算时都需要对阶,尾数进行运算时可能会有舍入误差,导致计算结果与手动计算结果不相符。
代码测试
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double a = 1.0;
double b = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;
System.out.println(a);
System.out.println(b);
System.out.println(a==b);
}
}
输出结果为:
那怎么来避免这种情况呢?
当涉及到浮点数比较相等的时候,我们取两数差的绝对值,当两数的误差小于10的负6次方(一般取这个数)的时候,我们判断这两个数是相等的,此时误差非常小。
此时判断正确。