Good catch, I think this is a bug. Looks like it was introduced a long time ago, as a consequence of #5526 (which added Float32 to the promotion to make things work for Float16) and #5652 (which changed the promotion criteria to use norm) and then a later change to the norm function that made norm(::Rational) return a Rational.