| 1 | initial version |
Here are a few minor suggestions for squeezing out a little extra speed in your function.
In the Cython code you wrote above you use the Python abs and int function. This induces coercion of your fast C-data types to slow Python-data types. I suggest starting your speedups by using the C-abs function and <int>, instead.
%cython
cdef extern from "math.h":
double fabs(double)
cpdef double g2(double x):
x = fabs(x)
x = 4.0*(x/4.0 - <int>(x/4.0))
if x <= 2.0:
return 1.0-x
return -3.0+x
I tried using floor(fabs(x/4.0)) instead of <int>(x/4.0) but I didn't get any additional speedup. Also, cpdef improves performance if you call this function from Cython code.
| 2 | No.2 Revision |
Here are a few minor suggestions for squeezing out a little extra speed in your function.
In the Cython code you wrote above you use the Python abs and int function. This induces coercion of your fast C-data types to slow Python-data types. I suggest starting your speedups by using the C-abs function and <int>, instead.
%cython
cdef extern from "math.h":
double fabs(double)
cpdef double g2(double x):
x = fabs(x)
x = 4.0*(x/4.0 - <int>(x/4.0))
if x <= 2.0:
return 1.0-x
return -3.0+x
I tried using floor(fabs(x/4.0)) instead of <int>(x/4.0) but I didn't get any additional speedup. Also, cpdef improves performance if you call this function from Cython code.code. In particular, the $f(x)$ you define above should be a Cython function as well so you can take full advantage of the Cython speed benefits.
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.