With respect to floating-point, both plan A and plan B have their
problems when numbers aren't exact integers, though B seems better:
In plan B, a small change in a makes for a small change in the
elements of a..b, unlike plan A:
Range Plan B Plan A
0.999 .. X = [0.999, 1.999, ...] 0.999 .. X = [0, 1, ...]
1.001 .. X = [1.001, 2.001, ...] 1.001 .. X = [1, 2, ...]
A small change in a or b may add or drop an element to the end of the
list in both cases:
Range Plan B Plan A
1 .. 1.999 [1] [1]
1 .. 2.001 [1, 2] [1, 2]
0.999 .. 1.999 [0.999, 1.999] [0, 1]
1.001 .. 1.999 [1.001] [1]
1.001 .. 2.001 [1.001, 2.001] [1,2]
But in Plan A, the difference may be *two* elements:
0.999 .. 2.001 [0.999, 1.999] [0, 1, 2]
So Plan B overall seems to be easier to use. Of course, with floats,
you always have to consider cases like this in serious work.
-s