这很奇怪(至少对我来说)。此例程显示为true:
double x = 11.0; double y = 10.0; if (x-y == 1.0) { // print true } else { // print false }
但是,此例程显示false:
double x = 1.1; double y = 1.0; if (x-y == 0.1) { // print true } else { // print false }
有人在乎解释这里发生了什么吗?我猜想它与ints构成floats的整数运算有关。另外,还有其他10具有此属性的基准(除外)?
int
float
10
1.0具有精确的二进制表示形式。0.1不。
也许您是在问为什么0.1不以1的尾数和-10的指数存储?但这不是它的工作原理。它不是十进制数字加指数,而是二进制数字。因此“乘以10”不是自然的事情。
抱歉,也许最后一部分不清楚。最好将指数视为位移。位的移位不会将像0.1(十进制)这样的无限序列转换为有限序列。