# find all multiplicands and multipliers for a number

Dave Angel davea at davea.name
Mon Apr 13 06:35:02 CEST 2015

```On 04/12/2015 11:30 PM, Paul Rubin wrote:
> Dave Angel <davea at davea.name> writes:
>> If I were trying to get a bound for stopping the divide operation, on
>> a value too large to do exact real representation, I'd try doing just
>> a few iterations of Newton's method.
>
> Python ninja trick: math.log works on bignums too large to be
> represented as floats ;-)
>

But doesn't math.pow return a float?   Af first crack I figured it was
because I had supplied math.e as the first argument.  But I have the
same problem with  (python 3.4)

x = 2596148429267413814265248164610047
print( math.pow(2, math.log2(x)) )
2.596148429267414e+33

Or were you saying bignums bigger than a float can represent at all?  Like:

>>> x = 2**11111 -1
>>> len(str(x))
3345
>>> math.log2(x)
11111.0
>>> math.pow(2, math.log2(x)//2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: math range error

--
DaveA

```