此方法返回’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); }
解决方法
你从一个巨大的价值中减去相当小的一个值(小于1000).小值远小于理论结果最接近的可表示值仍然是原始值的大值.
基本上这是浮点数工作方式的结果.
想象一下,我们有一些十进制浮点类型(仅为了简单起见),它只在尾数中存储5个有效数字,并且范围为0到1000.
你的例子就像写10999 – 1000 …想想当四舍五入到5个有效数字时的结果.是的,确切的结果是99999 ….. 9000(999位数),但如果只能表示5位有效数字的值,最接近的结果是10999.