Add this to the end of the previous program:
f = floor(i);
print i[format=20.16] f y;
You'll see that the conversion of noninteger subscripts is different from a simple floor. The fuzzing of near-integer values is important to correctly handle floating point arithmetic. If you reread my previous post, you'll see that I stated that x[1-epsilon] = x[1], not x[0] (which would be an error).