ami*_*ham 9 java floating-point equals-operator
此方法返回'true'.为什么?
public static boolean f() {
double val = Double.MAX_VALUE/10;
double save = val;
for (int i = 1; i < 1000; i++) {
val -= i;
}
return (val == save);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 25
你从一个巨大的值中减去了一个很小的值(小于1000).小值远小于理论结果的最接近可表示值仍然是原始值的大值.
基本上它是浮点数运算方式的结果.
想象一下,我们有一些十进制浮点类型(只是为了简单),它只在尾数中存储了5位有效数字,并且在0到1000范围内存储了一个指数.
你的例子就像写10 999 - 1000 ...当四舍五入到5位有效数字时,想想结果会是什么.是的,确切的结果是99999 ..... 9000(有999位数字)但是如果你只能用5位有效数字表示值,那么最接近的结果是10 999.