Another change to fix issue #2244

I believe c needs to be mrb_float so it can hold any overflow.

Also consolidated the multiplication code, I'm not sure if this is the best way however.