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