微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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).小值远小于理论结果最接近的可表示值仍然是原始值的大值.

基本上这是浮点数工作方式的结果.

想象一下,我们有一些十进制浮点类型(仅为了简单起见),它只在尾数中存储5个有效数字,并且范围为0到1000.

你的例子就像写10999 – 1000 …想想当四舍五入到5个有效数字时的结果.是的,确切的结果是99999 ….. 9000(999位数),但如果只能表示5位有效数字的值,最接近的结果是10999.

原文地址:https://www.jb51.cc/java/122543.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐