An occasional infinite loop
importance: 4
This loop is infinite. It never ends. Why?
let i = 0;
while (i != 10) {
i += 0.2;
}
That’s because i
would never equal 10
.
Run it to see the real values of i
:
let i = 0;
while (i < 11) {
i += 0.2;
if (i > 9.8 && i < 10.2) alert( i );
}
None of them is exactly 10
.
Such things happen because of the precision losses when adding fractions like 0.2
.
Conclusion: evade equality checks when working with decimal fractions.