了解浮点和无限循环

use*_*483 3 java loops infinite

我有这个代码:

while (x < 10.0) {
    x += y;
}
Run Code Online (Sandbox Code Playgroud)

如果xy是浮点数,显然如果你添加它们,循环将无限继续.我不明白它怎么会通过10.似乎不可能不通过十,但它不是根据我的教科书.

这是为什么?是因为浮点数会发生舍入吗?或者我错过了什么?

编辑:顺便说一句x,y是严格积极的

Oli*_*rth 8

你还没有告诉我们的实际初始值x或者y,所以我们不能肯定地说.但这是一个为什么这可能不起作用的一个例子:

class Main {
    public static void main(String[] args) {
        float x = 1.0f;
        float y = 1e-8f;
        float z = x + y;

        System.out.printf("%g\n", x);      // 1.00000
        System.out.printf("%g\n", y);      // 1.00000e-08
        System.out.printf("%g\n", z);      // 1.00000
        System.out.printf("%g\n", z - x);  // 0.00000

    }
}
Run Code Online (Sandbox Code Playgroud)

请参见http://ideone.com/RMMPlP.