This should also support floating point. Note the use of `likely_type_from_types` used in conjunction with `cast` in other portions of the code to ensure that both operands have the same type.