Instructions for using the inline floating-point routines for the i387
written by John C. Bowman <bowman@math.ualberta.ca>

To enable, replace any lines in /usr/include/math.h of the form

/* Get machine-dependent inline versions (if there are any).  */
#if (!defined __NO_MATH_INLINES && defined __OPTIMIZE__) \
    || defined __LIBC_M81_MATH_INLINES
#include <bits/mathinline.h> /* OR <__math.h> */
#endif

with

#include </usr/local/include/i386/__math.h>

(before the final #endif in /usr/include/math.h).

Notes:

1.  The accuracy of the sinh, tanh, asinh, and atanh functions have been
    dramatically improved (relative to the poorly written libm versions)
    for arguments of small magnitude. For example, sinh(1.0e-7) now returns
    the correct value 1.0000000000000017e-07 (the old libm routine incorrectly
    returned 9.9999999999975326e-08). The error in the old libm routine could
    become very large: it returns 9.7578195523695399e-19 for sinh(1.0e-18)
    (the correct value is 1.0e-18). (These errors in libm have now been fixed.)

2.  The inverse hyperbolic functions and other ISOC9X extensions to
    ANSI C are defined. Further extensions may be enabled with the
	option -D__USE_MISC, for example __coshm1(x)=cosh(x)-1 and
	__acosh1p(x)=acosh(1+x), which, unlike acosh(x) and cosh(x).
	are exact inverses of each other (to within machine precision). 
    Inlined versions of __sgn(x)=(x == 0 ? 0 : (x > 0 ? 1 : -1)), log2(x), 
	__pow2(x), and __sincos are also defined.

3.  Inlining may be disabled at compile time with the GCC option
    -D__NO_MATH_INLINES.

4.  Float, double and long double versions of the routines are defined.

5.  In the interest of efficiency, the inlined routines rely on hardware
    error detection; although range and domain errors will normally be
    detected as floating point exceptions, errno will not be set. 

