On Tue, Aug 25, 2009 at 8:40 PM, Mark Tolonen<metolone+gm...@gmail.com> wrote: > > "Cevahir Demirkiran" <cevo...@gmail.com> wrote in message > news:3f74e020908251648k7b391a09g78b155507b2f2...@mail.gmail.com... >> >> Hi, >> >> I would like to do a floor division by a power of 2 in python to make it >> faster than / (modular division in 2.x). >> However, it is slower. >> What is the reason of that? >> I checked them via: >> >> def f2(x,n): >> t1 = clock() >> r = x/pow(2,n) >> t2 = clock() >> print (t2-t1) >> print r >> t2 = clock() >> r = x>>n >> t3 = clock() >> print (t3-t2) >> print r >> > > It's not slower on my system, but note the inconsistent results also: > >>>> f2(1024,5) > > 3.47396033483e-06 > 32 > 2.19077375482e-06 > 32 >>>> >>>> f2(1024,5) > > 4.84135603429e-06 > 32 > 3.08499440393e-06 > 32 >>>> >>>> f2(1024,5) > > 4.6782844052e-06 > 32 > 3.77604384028e-06 > 32 > > Time it with timeit... > > C:\>python -m timeit -n 10000000 -s x=1024 "x>>5" > 10000000 loops, best of 3: 0.113 usec per loop > > C:\>python -m timeit -n 10000000 -s x=1024 "x/pow(2,5)" > 10000000 loops, best of 3: 0.468 usec per loop > > Right-shift is over 4x faster.
Adjusting for not having to lookup the name "pow", right shift is still faster, but only slightly. ch...@morpheus ~ $ python -m timeit -n 10000000 -s x=1024 "x/pow(2,5)" 10000000 loops, best of 3: 0.318 usec per loop ch...@morpheus ~ $ python -m timeit -n 10000000 -s x=1024 "x/(2**5)" 10000000 loops, best of 3: 0.0973 usec per loop ch...@morpheus ~ $ python -m timeit -n 10000000 -s x=1024 "x>>5" 10000000 loops, best of 3: 0.0885 usec per loop Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list