レッスンに戻る

偶発的な無限ループ

重要性: 4

このループは無限です。終わりません。なぜでしょう?

let i = 0;
while (i != 10) {
  i += 0.2;
}

なぜなら、i は決して 10 と等しくならないからです。

i本当 の値を見るために実行してみましょう。:

let i = 0;
while (i < 11) {
  i += 0.2;
  if (i > 9.8 && i < 10.2) alert( i );
}

ちょうど 10 になるものはありません。

0.2 のような少数を足すときの精度の低下によりこのようなことが起こります。

結論: 小数部分を扱うとき、等価チェックを避けましょう。