0.step(Float::INFINITY, 10).each generates Float values until Ruby 2.0 and after Ruby 2.6, but it generates Integer values between Ruby 2.1 and 2.5. The reason why the behavior changes after Ruby 2.6 is due to ArithmeticSequence.
0.step(Float::INFINITY, 10) { ... } generates Float values until Ruby 2.0, but it generates Integer values after Ruby 2.1.
Hence it's also possible that the right behavior is to generate Integer values rather than Float. We need to know the reason for the behavior change in Ruby 2.1.
IMHO Integer makes sense so one can step by N from 0 to infinity with 0.step(Float::INFINITY, 10) (with Numeric#step), since there is no Integer::INFINITY.
Using Float also can cause significant errors with a big enough step or values.
So the rule would be "use floats if receiver or step is Float (ignore to/limit's type), otherwise leave them as-is.
The keyword form already uses integers for "step infinitely":
When start and step are integers, there's no error, so that it seems OK to make the value passing to the block integers.
If any implementation issue or compatibility problem happens, let us discuss later.