This is all a semantic problem. Different people have different 
interpretations of what "range" really means. Personally I think a range 
is fundamentally a continuous construct; a discrete "range" should 
really be called a set or an enum. I use ranges almost exclusively with 
numeric or time values and I would expect (1..3).include?(2.5) to be 
true. It is strings that are the weird exception, not integers.

Then there's also some ambiguity in the naming of the methods. To me, 
"include?" and "cover?" sound like they express continuous behavior but 
"member?" does sound like it expresses discrete behavior.

Since this is open to interpretation, I would suggest like David that 
the behavior should remain backward compatible. Besides, it's always 
possible to test for discrete membership by converting to enum.

Oh I just thought of an interesting case; given that 2.hash != 2.0.hash 
then by using set semantics shouldn't (1..3).include?(2.0) return false?

--
Daniel