On Fri, 15 Jul 2016 21:39:31 +1000, Steven D'Aprano wrote: > prod *= (m1*m2)
Should be: prod = m1*m2 or: prod *= m1 (in the latter case, there's no point in decomposing prod). Of course, if the result overflows, it's going to overflow whether you use the naive approach or frexp(); in the latter case, it's the 2.0**scale which will overflow. One advantage of processing the scale separately is that you can use e.g. return ((int(prod * 2**53) * (2**(scale-53))) if scale >= 53 else prod * 2**scale) which will return a (long) integer if the exponent is such that the fractional bits are lost. -- https://mail.python.org/mailman/listinfo/python-list