cvs commit: src/lib/msun/src e_expf.c

David Schultz das at FreeBSD.ORG
Sat Feb 26 02:32:07 GMT 2005


On Thu, Feb 24, 2005, David Schultz wrote:
> das         2005-02-24 06:32:13 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     lib/msun/src         e_expf.c 
>   Log:
>   Revert rev 1.8, which causes small (e.g. 2 ulp) errors for some
>   inputs.  The trouble with replacing two floats with a double is that
>   the latter has 6 extra bits of precision, which actually hurts
>   accuracy in many cases.  All of the constants are optimal when float
>   arithmetic is used, and would need to be recomputed to do this right.

This is related to a good reason why we can't switch the default
precision on i386 to extended.  Many of the functions in libm use
minimax approximations, which are ``optimal'' approximations in
the sense that their maximum error over all in-range inputs is the
smallest possible (unless more terms are used).  These approximations
take rounding error into account, so when the machine precision is
increased, they're no longer optimal and the error in the approximation
can increase significantly.  There are less efficient methods that
don't depend on the exact machine precision, e.g. Chebyshev
approximations, but it would be a PITA to switch everything.


More information about the cvs-all mailing list