When I try to create an incremental list from
say, to get a element of 2.001, the lost has to take in y=2.000
That's not true; it's possible that y becomes, say, 1.99999999999997.
You check on
y < b, but then add
round(float(y+10**-r),r) to the list. It's of course possible that the first is true, but the second is still larger than b.
To see what's happening, remove the rounding, and look at the next-to-last number in your lists in the cases where it's going "wrong".