Keywords : elementary function, libm, double precision arithmetic, correct rounding.
CRlibm: a Library of Elementary Functions with Correct Rounding
The CRlibm project aims at developing a mathematical library ( libm ) which provides implementations of the double precision C99 standard elementary functions,
- correctly rounded in the four IEEE-754 rounding modes,
- with a comprehensive proof of both the algorithms used and their implementation,
- sufficiently efficient in average time, worst-case time, and memory consumption to replace existing libm s transparently.
In 2005, we released the stable version 0.8, with implementations of exponential, natural logarithm, hyperbolic sine and cosine, arctangent, and the trigonometric functions (sine, cosine and tangent), and complete proofs of these implementations. The infrastructure was also improved in many ways, especially concerning testing and validation.
Then we released the interim versions 0.10beta, then 0.11beta with three more functions (logarithms in base 2 and 10, and arcsine), and a complete rewrite of the previous logarithms and exponential: the new versions use double-extended hardware when available, and also reduce the worst-case execution time by a factor 10 using either double-double-extended  or triple-double  ,  .
In the beta versions, the code is complete, working and validated by an extensive self-test procedure, but the proof of correct rounding is not complete yet. These new releases include machine-assisted proofs using the Gappa tool  .
The library includes an extensive documentation and proof which makes an excellent tutorial on elementary function software development.
The library has been downloaded more than 1000 times. It is used in the LHC@home project of CERN ( http://lhcathome.cern.ch/ ), and is considered for inclusion as the default libm in several open-source compiler projects.
Status: Beta release / Target: ia32, ia64, Sparc, PPC / License: LGPL / OS: Unix / Programming Language: C / URL: http://www.ens-lyon.fr/LIP/Arenaire