Better way to find the powers of 2

176 views Asked by At

I am new to python. Is 1 << n is always better than 2 ** n? Why or Why not?

Are there any better ways to find the powers of 2?

2

There are 2 answers

2
Bathsheba On BEST ANSWER

An important programming tenet: don't over-optimise prematurely.

Given that 1 << n will be performed in integer arithmetic which significantly limits the results space, the fastest way would be to precompute them and use a lookup table (e.g. a simple array). For a 64 bit unsigned integral types such a table would only have 64 entries.

(In C++ you could even evaluate them at compile time with a bit of template trickery.)

1
Vishnu Upadhyay On

<< and ** works almost same when compare to time complexity, result can be seen, pow works faster when values are small then these but for large values it works slow

In [108]: %timeit pow(2, 2)
10000000 loops, best of 3: 127 ns per loop

In [104]: timeit 1<<2
10000000 loops, best of 3: 23.2 ns per loop

In [105]: timeit 2**2
10000000 loops, best of 3: 24.5 ns per loop


In [111]: %timeit  1<<10
10000000 loops, best of 3: 23.9 ns per loop

In [112]: %timeit  2**10
10000000 loops, best of 3: 23.5 ns per loop

In [113]: %timeit pow(2, 10)
10000000 loops, best of 3: 167 ns per loop

In [114]: %timeit  1<<10000
10000000 loops, best of 3: 23.5 ns per loop

In [115]: %timeit  2**10000
10000000 loops, best of 3: 23.9 ns per loop

In [116]: %timeit pow(2, 10000)
10000 loops, best of 3: 27.7 µs per loop