Thu Mar 7 19:55:35 EST 2013


The trick is to never compute any exponentials, i.e. for envelopes or
z transform mappings, but use multiplicative updates instead.  Maybe
there is a way to do this as a proper transform, i.e. without having
to "weave" the envelopes with the coefficients.

So, essentially this is 1st or 2nd order splines.

Next: Look at libm implementation of exp / sin  (see [1] math/*exp*)

Had to make a small program to find out where it is actually going:
*__GI_(...)(long long, float *) (x=0) at ../sysdeps/ieee754/flt-32/w_expf.c:41
41	../sysdeps/ieee754/flt-32/w_expf.c: No such file or directory.

This delegates to __ieee754_expf() in e_expf.c

It's not a trivial operation..  What worries me a bit is the table
lookup, so it seems that to make this fast, it's best to perform all
the expf() operations in sequence, to keep everything in the cache.

So, definitely: it is worth making an approximation.

To find out:

- are there any special routines in intel architecture to compute exp
/ sin or at least a starter value that can be refined iteratively? [2][3].

- is exp2f faster?

[1] http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.bz2
[2] http://software.intel.com/sites/products/documentation/hpc/mkl/vml/functions/exp.html
[3] http://gruntthepeon.free.fr/ssemath/