Java的“==”运算符双精度
发布时间:2020-12-14 05:27:06 所属栏目:Java 来源:网络整理
导读:此方法返回’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).小值远小
此方法返回’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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |