Hi,
Kazushige Goto and myself, we are now releasing a first version 0.10 of
free fast math routines to eventually replace/complement libm. These
routines are based on work I did years ago for another RISC CPU, but
those now use different (*better* !) approximations and some other ideas
that grew in the meantime. Kazushige Goto did a great job in optimizing
the assembler code, "vectorizing" polynomial evaluation code and
improving instruction scheduling to get the code so fast as it is now
!
Some of the routines seem to run even nearly twice as fast as the
already fast "Cray" routine I ported some weeks ago, at comparable
accuracy.
This first version 0.10 of libffm only includes the common trig and
inverse trig functions and does not yet contain checking for invalid
arguments. That will be added soon, as also log, exp and sqrt will
follow shortly (and others later) (time permitting
!).
It is basically released already now to show that work on a free fast
Alpha math lib is continuing and to help find possible bugs and other
problems as soon as possible. However, the routines should be pretty
stable and usable already
now.
Further modification could be (besides the argument checking) the
fine-tuning of the last bits of the constants used and of the order of
evaluation to minimize or compensate the effect of rounding
errors.
In the preliminary versions, till the whole lib has stabilized, we would
like to keep the copyright on the routines to us. However, in the end,
this code will become full GPL. However, in the moment the routines can
be freely used in your programs. See file README in the archive for more
details.
The routines can be downloaded
at
http://people.frankfurt.netsurf.de/Joachim.Wesner/libffm.0.10.tar.gz
See file README for further instructions and
details.
Approximate running times in us in a tight loop for random arguments
0..10 (0..1 for asin/acos) on a 533MHz LX
21164
libffm libfm
libm
sin 0.12 0.22
0.45
cos 0.19 0.22
0.46
tan 0.13 0.27
0.63
asin 0.32 ----
1.39
acos 0.29 ----
1.31
atan 0.20 ----
0.69
atan2 0.23 ----
0.86
Have Fun !!!
Joachim