get number that is raised to the power of

Boris Borcic bborcic at gmail.com
Fri May 2 06:02:50 EDT 2008


Marc 'BlackJack' Rintsch wrote:
> On Fri, 02 May 2008 19:19:07 +1000, Astan Chee wrote:
> 
>> Hi,
>> Im not sure if this is more of a math question or a python question. I 
>> have a variable in python:
>>  >>> v = 10.0**n
>> is there a way to find the value of n if i know only v aside from 
>> str(v).split('+')[1] ?

Astan, you could try something like (n for n in range(1,100) if 
10.0**n==v).next() or like len(str(int(v)))-1

>> that seems like too much of a hack and I was 
>> wondering if there was a faster way of doing it?

Faster ?! How fast do you need it to be ?

> 
> That hack isn't even working properly because ``str(10.0**1)`` has no '+'
> in its string representation.

OTOH "%.0e" % (10.0**1) does
...but "%.0e" % (10.0**-1) of course doesn't

> 
> Solution:
> 
> n = math.log(v, 10)
> 
> Ciao,
> 	Marc 'BlackJack' Rintsch

Beware of floating point approximations, though. Eg

 >>> assert log(10**3,10)==3

Traceback (most recent call last):
   File "<pyshell#12>", line 1, in <module>
     assert log(10**3,10)==3
AssertionError

Cheers, BB



More information about the Python-list mailing list