Actually, yes. The exponents are done specifically in that way to force the sign of the end value.
I suppose i could just call abs() on it though.... - Chris On Tue, Sep 29, 2009 at 8:58 PM, Robert Bradshaw <[email protected]> wrote: > On Sep 29, 2009, at 10:05 AM, Sturla Molden wrote: > >> Chris Colbert skrev: >>> No, the python ** gets translated to a pow statement by cython. >>> >>> I think the issue is that for some reason, i'm getting stuck in the >>> gcc slow pow function.... >>> >>> if i let e2 and e1 be 1 and replace f**2 (which would call pow) >>> with f*f, >>> >>> my execution time drops to this: >>> 10000 loops, best of 3: 108 µs per loop >>> >>> over 6x improvement just by avoid a few measly pow statements... >>> anyone know why i'm stuck in slowpow? >>> >> pow() is "slow" because it is a general function that can compute any >> power, including pow(x, -231436.74638746238746). It is not >> restricted to >> integers only. Therefore, >> >> cdef inline double pow0(double x): >> return 1 >> >> cdef inline double pow1(double x): >> return x >> >> cdef inline double pow2(double x): >> return x*x >> >> cdef inline double pow3(double x): >> return x*x*x >> >> is (often) much faster than pow(x,0), pow(x,1), pow(x,2), and pow(x, >> 3). > > Some C compilers will unroll pow(x,2) for you, but I'm surprised they > don't go further (at least in my experiments). This unrolling for > small constant integer powers may actually be worth adding to Cython > itself. > >>>>>> and within that loop it is these statements that take the bulk >>>>>> of the time: >>>>>> >>>>>> F = ((f1**2)**(1/e2) + (f2**2)**(1/e2))**(e2/e1) + (f3**2)**(1/e1) > > Is there a reason you're doing ((f2**2)**(1/e2))**(e2/e1) rather than > f2**(2/e1) or even (f2*f2)**(1/e1)? > > - Robert > > _______________________________________________ > Cython-dev mailing list > [email protected] > http://codespeak.net/mailman/listinfo/cython-dev > _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
