a .. b



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