Optimise loops number by iterating over shorter operand

Also change operator *= to be exception safe (copy swap)