As some of you may know, doing a for loop like this:
for i = 1, 2, 0.1 do
print(i)
end
would print:
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
because of floating-point rounding errors. However, when I set the start and end conditions to 0 and 1, like this:
for i = 0, 1, 0.1 do
print(i)
end
it correctly terminates at 1:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
This only seems to be the case when the increment is 0.1 (or when it's a multiple of 0.5^n) and start/end is 0, 1, respectively. When I set it to 0.01, it terminates at 0.99. Furthermore, when I work backwards, from 1 to 0 with a decrement of -0.1, it terminates at a very small number (that's not quite 0):
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
1.3877787807814e-16
It looks like this only ever terminates correctly when the start, end, and increment is a multiple of 0, 1, and 0.1, respectively:
for i = 0, 3, 0.3 do
print(i)
end
prints:
0.0
0.3
0.6
0.9
1.2
1.5
1.8
2.1
2.4
2.7
3.0
My question is: is this a quirk with this particular numeric for-loop, or is there something else going on?
