> In my mind this is a consistency issue. Either > integers should be a subtype of floats or they should not be. If "/" is > defined as a float division operator then the fact that both integers > are promoted is not magic it is simply the way the language works. If integers are a subtype of float, then the "/" operator does not require special magic to get round the type system. The / operator should always take two floats and return a float. If one of the float arguments is actually an integer, no problem under the principle of least surprise. If the interpreter does special bit-twiddling magic to optimise numbers but keeps the type system consistent, that's also no problem under the principle of least surprise. > Just rename the "/" operator in your mind to "the floatdiv operator" > and it won't seem magic. 1/ 2 returns a floored integer, while 1/2.0 returns a float, so / is not "floatdiv" when both arguments integers, only if any of the arguments is not an integer. In my experience, having two different division operators, has helped avoid errors: one operator performs floored division and applies to integers only (//), the other always returns a float and applies to any type of number (/). Cheers, Nat.