编程语言
首页 > 编程语言> > Java中的双重算术和相等

Java中的双重算术和相等

作者:互联网

这是一个奇怪的事(至少对我来说).此例程打印为true:

double x = 11.0;
double y = 10.0;
if (x-y == 1.0) {
    // print true
} else {
    // print false
}

但是这个例程打印错误:

double x = 1.1;
double y = 1.0;
if (x-y == 0.1) {
    // print true
} else {
    // print false
}

有人想解释这里发生了什么吗?我猜这与整数算法有关,因为冒充为浮点数的整数.此外,还有其他基地(10个除外)有这个属性吗?

解决方法:

1.0具有精确的二进制表示. 0.1没有.

也许你在问为什么0.1没有存储为1的尾数和-10的指数?但这不是它的工作原理.它不是十进制数加上指数,而是二进制数.所以“时代10”并不是一件很自然的事情.

对不起,也许最后一部分不清楚.最好将指数视为位的移位.没有位移位会将无限序列(如0.1(十进制))转换为有限序列.

标签:java,floating-point,floating-accuracy,double,ieee-754
来源: https://codeday.me/bug/20190927/1824696.html