了解浮点和无限循环

时间:2013-06-04 00:33:14

标签: java loops infinite

我有这段代码:

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

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

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

编辑:xy严格按照

的方式提出

3 个答案:

答案 0 :(得分:8)

您尚未告诉我们xy的实际初始值,因此我们无法确定。但这里有一个例子说明为什么这可能不起作用:

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

答案 1 :(得分:0)

你的y值可能是0或非常小,因此使循环运行为infinte或很长一段时间:

假设是

y = 0;

此循环将变为无限

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

答案 2 :(得分:0)

您使用的是Java吗?试试这个 -

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

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