3

我有这个代码:

while (x < 10.0) {
    x += y;
}

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

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

编辑:顺便说一句xy严格来说是积极的

4

3 回答 3

8

你还没有告诉我们xor的实际初始值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

    }
}

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

于 2013-06-04T00:46:32.337 回答
0

你在使用 Java 吗?试试这个 -

while(x < 10.0f) {
x += y;
}

或者

while(x < (float)10.0) {
x += y;
}
于 2014-09-10T15:12:51.057 回答
0

您的 y 值可能为 0 或非常小,因此使循环运行无限或很长时间:

假设如果

y = 0;

这个循环将无限循环

while(x < 10.0) {
x += y;
}
于 2013-06-04T00:39:14.540 回答