3

私はこのコードを持っています:

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

xyが浮動小数点数の場合、それらを追加するとループが無限に続くようです。どうして 10 に合格しないのか理解できません。

何故ですか?浮動小数点で発生する丸めのためですか? または、何か不足していますか?

編集:ちなみに厳密にポジティブxですy

4

3 に答える 3

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

    }
}

http://ideone.com/RMMPlPを参照してください。

于 2013-06-04T00:46:32.337 に答える
0

y 値が 0 または非常に小さい可能性があるため、ループが無限または長時間実行されます。

仮定すると

y = 0;

このループは無限に続く

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

Java を使用していますか?これを試してください-

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

また

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