私はこのコードを持っています:
while (x < 10.0) {
x += y;
}
x
とy
が浮動小数点数の場合、それらを追加するとループが無限に続くようです。どうして 10 に合格しないのか理解できません。
何故ですか?浮動小数点で発生する丸めのためですか? または、何か不足していますか?
編集:ちなみに厳密にポジティブx
ですy
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を参照してください。
y 値が 0 または非常に小さい可能性があるため、ループが無限または長時間実行されます。
仮定すると
y = 0;
このループは無限に続く
while(x < 10.0) {
x += y;
}
Java を使用していますか?これを試してください-
while(x < 10.0f) {
x += y;
}
また
while(x < (float)10.0) {
x += y;
}