;; Using a double as the value of step can produce an unexpected extra value.
;; In the second example below, there's an extra final value that's almost = 0.8.
(range 0 0.8 1/10)
(0 1/10 1/5 3/10 2/5 1/2 3/5 7/10)
user=> (range 0 0.8 0.1)
(0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999)
;; It's difficult to guess when this behavior will occur, unless you know
;; whether the double representation of step plus what "should" be the
;; last number is in fact less than end. From the second example above, you
;; can see that the extra value won't be included if you replace 0.8 by a
;; number in 0.1, ..., 0.7 (e.g. since 0.7 is not less than 0.7) but you
;; wouldn't necessarily know that you will get the extra value for end = 0.9,
;; 1.0, 1.1, but not for end = 1.2.