MATH(3M)MATH(3M)


NAME
     math - introduction to mathematical library functions

DESCRIPTION
     These functions constitute the C math library libm.  There are four
     versions of the math library:  libm.a, libmx.a, libm43.a, and
     libfastm.a

     The first, libm.a, contains routines implemented in 1994 that use
     algorithms which take advantage of the MIPS architecture and include
     many routines for the float data type.

     For the -64 and -n32 versions of libm.a, a second version of the math
     library, libmx.a, contains functions which give identical results to
     those in libm.a, but which use System V error handling.

     See matherr(3M) for a description of error handling for libmx.a
     functions.

     The third version of the math library, libm43.a, contains routines all
     based on the original codes in the 4.3BSD release. The difference
     between the error bounds for libm.a and libm43.a is typically around 1
     unit in the last place (ULP), whereas the performance difference may
     be a factor of two or more.

     The link editor searches this library under the -lm, -lmx, or -lm43
     option.  Declarations for these functions may be obtained from the
     include file <math.h>.

     The fourth library, libfastm.a, contains faster, lower-precision
     versions of various routines from libm.a.

   List of functions
     Error bounds (in ULPs) in the final two columns in the following table
     apply only to the -64 and -n32 versions of libm.a and libmx.a, The
     error bound sometimes applies only to the primary range.

     -------------------------------------------------------------------
     Name


Manpage


Description


libm.a


libm43.a


-------------------------------------------------------------------


     acos

sin(3M)

inversetrigonometric
                                   function


2

3


     acosf

sin(3M)

inversetrigonometric
                                   function


1


     acosh

asinh(3M)

inversehyperbolic
                                   function


3

3


     acoshf

asinh(3M)

inversehyperbolic
                                   function


1.5


     asin

sin(3M)

inversetrigonometric
                                   function


2

3


     asinf

sin(3M)

inversetrigonometric
                                   function


1


     asinh

asinh(3M)

inversehyperbolic
                                   function


3

3


     asinhf

asinh(3M)

inversehyperbolic
                                   function


1.3


     atan

sin(3M)

inversetrigonometric
                                   function


1.5

1


     atanf

sin(3M)

inversetrigonometric
                                   function


1


     atanh

asinh(3M)

inversehyperbolic
                                   function


3

3


     atanhf

asinh(3M)

inversehyperbolic
                                   function


1.2


     atan2

sin(3M)

inversetrigonometric
                                   function


2

2


     atan2f

sin(3M)

inversetrigonometric
                                   function


1


     cbrt

sqrt(3M)

cuberoot

1

1


     cbrtf

sqrt(3M)

cuberoot


     ceil

floor(3M)

integernolessthan

0

0


     ceilf

floor(3M)

integernolessthan

0

0


     copysign

floor(3M)

copysignbit

0

0


     copysignf

floor(3M)

copysignbit


0


     cos

sin(3M)

trigonometric
                                   function


2

1


     cosf

sin(3M)

trigonometric
                                   function


1


     cosh

sinh(3M)

hyperbolicfunction

2

3


     coshf

sinh(3M)

hyperbolicfunction

1


     drem

floor(3M)

remainder

0

0


     dremf

floor(3M)

remainder


0


     erf

erf(3M)

errorfunction

1

?


     erfc

erf(3M)

complementaryerror
                                   function


4

?


     exp

exp(3M)

exponential

1

1


     expf

exp(3M)

exponential

1


     expm1

exp(3M)

exp(x)-1

1

1


     expm1f

exp(3M)

exp(x)-1

1


     fabs

floor(3M)

absolutevalue

0

0


     fabsf

floor(3M)

absolutevalue

0

0


     fdim

fdim(3M)

differencefunction


     fdimf

fdim(3M)

differencefunction


     floor

floor(3M)

integernogreater
                                   than


0

0


     feclearexcept

floatenv(3M)

floating-point
                                   exception


N/A


     fegetenv

floatenv(3M)

floating-point
                                   exception


N/A


     fegetexceptflag

floatenv(3M)

floating-point
                                   exception


N/A


     fegetround

floatenv(3M)

floating-point
                                   exception


N/A


     feholdexcept

floatenv(3M)

floating-point
                                   exception


N/A


     feraiseexcept

floatenv(3M)

floating-point
                                   exception


N/A


     fesetenv

floatenv(3M)

floating-point
                                   exception


N/A


     fesetexceptflag

floatenv(3M)

floating-point
                                   exception


N/A


     fesetround

floatenv(3M)

floating-point
                                   exception


N/A


     fetestexcept

floatenv(3M)

floating-point
                                   exception


N/A


     feupdateenv

floatenv(3M)

floating-point
                                   exception


N/A


     floorf

floor(3M)

integernogreater
                                   than


0

0


     fma

fma(3M)

floatingmultiply-add


     fmaf

floor(3M)

floatingmultiply-add


     fmod

floor(3M)

remainderfunction

0


     fmodf

floor(3M)

remainderfunction

0


     hypot

hypot(3M)

Euclideandistance

1

1


     gammaf

gamma(3M)

gamma/loggamma


     lgammaf

gamma(3M)

gamma/loggamma


     hypotf

hypot(3M)

Euclideandistance

1

1


     j0

j0(3M)

besselfunction

?

?


     j1

j0(3M)

besselfunction

?

?


     jn

j0(3M)

besselfunction

?

?


     lgamma

lgamma(3M)

loggammafunction

?

?


     llrint

floor(3M)

roundedinteger


0


     llrintf

floor(3M)

roundedinteger


0


     lrint

floor(3M)

roundedinteger


0


     lrintf

floor(3M)

roundedinteger


0


     llround

floor(3M)

rounding


0


     llroundf

floor(3M)

rounded


0


     lround

floor(3M)

rounding


0


     lroundf

floor(3M)

rounded


0


     log

exp(3M)

naturallogarithm

1

1


     logf

exp(3M)

naturallogarithm

1


     log10

exp(3M)

logarithmtobase10

2

3


     log2

exp(3M)

logarithmtobase10


1.2


     log2f

exp(3M)

logarithmtobase10


     log10f

exp(3M)

logarithmtobase10

1.5


     log1p

exp(3M)

log(1+x)

1

1


     log1pf

exp(3M)

log(1+x)

1

1


     pow

exp(3M)

exponentialx**y

2

60-500


     nan

nan(3M)

quietNaN


N/A


     nanf

nan(3M)

quietNaN


N/A


     powf

exp(3M)

exponentialx**y

1


     rint

floor(3M)

roundtonearest
                                   integer


0

0


     remquo

floor(3M)

remainder


0


     remquof

floor(3M)

remainder


0


     scalbn

scalbn(3M)

quietNaN


     scalbnf

scalbn(3M)

quietNaN


     scalbln

scalbn(3M)

quietNaN


     scalblnf

scalbn(3M)

quietNaN


     sin

sin(3M)

trigonometric
                                   function


2

1


     sinf

sin(3M)

trigonometric
                                   function


1


     sinh

sinh(3M)

hyperbolicfunction

2

3


     sinhf

sinh(3M)

hyperbolicfunction

1


     sqrt

sqrt(3M)

squareroot

1

1


     sqrtf

sqrt(3M)

squareroot

1


     tan

sin(3M)

trigonometric
                                   function


2

3


     tanf

sin(3M)

trigonometric
                                   function


1


     tanh

sinh(3M)

hyperbolicfunction

2

3


     tanhf

sinh(3M)

hyperbolicfunction

1


     trunc

floor(3M)

truncatetowhole
                                   number


0

0


     truncf

floor(3M)

truncatetowhole
                                   number


0

0


     y0

j0(3M)

besselfunction

?

?


     y1

j0(3M)

besselfunction

?

?


     yn

j0(3M)

besselfunction

?

?


     -------------------------------------------------------------------

   Vector Intrinsics
     Beginning with IRIX 6.2, libm now supports the following vector
     intrinsics:

     Single precision vector routines:

      vacosf( float *x, float *y, long count, long stridex, long stridey )
      vasinf( float *x, float *y, long count, long stridex, long stridey )
      vatanf( float *x, float *y, long count, long stridex, long stridey )
      vcosf(  float *x, float *y, long count, long stridex, long stridey )
      vexpf(  float *x, float *y, long count, long stridex, long stridey )
      vlogf(  float *x, float *y, long count, long stridex, long stridey )
      vlog10f( float *x, float *y, long count, long stridex, long stridey )
      vsinf(  float *x, float *y, long count, long stridex, long stridey )
      vsqrtf( float *x, float *y, long count, long stridex, long stridey )
      vtanf(  float *x, float *y, long count, long stridex, long stridey )

     Double precision vector routines:

     vacos( double *x, double *y, long count, long stridex, long stridey )
     vasin( double *x, double *y, long count, long stridex, long stridey )
     vatan( double *x, double *y, long count, long stridex, long stridey )
     vcos(  double *x, double *y, long count, long stridex, long stridey )
     vexp(  double *x, double *y, long count, long stridex, long stridey )
     vlog(  double *x, double *y, long count, long stridex, long stridey )
     vlog10( double *x, double *y, long count, long stridex, long stridey )
     vsin(  double *x, double *y, long count, long stridex, long stridey )
     vsqrt( double *x, double *y, long count, long stridex, long stridey )
     vtan(  double *x, double *y, long count, long stridex, long stridey )

     Input and output arrays for the above routines should either be
     identical or non-overlapping.

     On MIPS4 processors, these routines are software-pipelined to take
     advantage of the multiple execution units.  On that machine,
     throughput is up to several times greater than by calling the scalar
     intrinsics repeatedly.  On processors other than the MIPS4, these
     routines are still available; although not software-pipelined on those
     processors, they still eliminate considerable call overhead when they
     can be used.  The vector routines do not support denormals on the
     MIPS4 processors.

     The single precision vector routines can also be called by the names
     vacosf, vasinf, etc.

   Semantics of these routines
               i=0, 1, ..., count-1:  y[i*stridey] = f(x[i*stridex])

               Example:

               double x[10000], y[10000];

               ...

                    for (i=0; i<1000; i++ )
                         y[2*i] = sin(x[3*i]);

               Transform (by hand) into

                    vsin(x, y, 1000, 3, 2);


     Vector and scalar routines may differ slightly; however, none of the
     results differ from the mathematically correct result by more than 2
     ULPs.  The vector square root routines are less accurate than the
     hardware versions; vsqrt and vsqrtf use the reciprocal square root
     instruction and lose up to about 2 bits of accuracy.  vsqrt and vfsqrt
     give correct answers for zero and infinite arguments.

   Long Double Arithmetic
     Long double arithmetic is supported by the compiler.  The
     representation used is not IEEE compliant; long doubles are
     represented on this system as the sum or difference of two doubles,
     normalized so that the smaller double is <= .5 ULP of the larger.
     This is equivalent to a 107 bit mantissa with an 11 bit biased
     exponent (bias = 1023), and 1 sign bit.  In terms of decimal
     precision, this is approximately 34 decimal digits.

     Long double constants are coded as double precision constants followed
     by the letter 'l' (upper or lower case).  The largest (finite) long
     double constant is 1.797693134862315807937289714053023e308L.

     The smallest long double precision constant is
     4.940656458412465441765687928682213e-324L.

     Long doubles less than 1.805194375864829576069262081173746e-276L may
     require a double denormal in their representation and therefore
     contain less than 107 bits precision.

     Long double NaNs and (signed) infinities are supported by the
     compiler.  Long double infinity is represented as the sum of a double
     infinity and a double zero; similarly for NaNs.

     In Fortran, long doubles are denoted by the term REAL *16.

     In general, long double arithmetic operations (+, -, *, /) are not
     precisely rounded, but are accurate to approximately 3 ULPs.

     Long double arithmetic operations are done in software by MIPSpro
     compilers; results of these operations may vary slightly from release
     to release due to improvements in the algorithms which implement them.

     Long double operations on this system are only supported in  round-
     to-nearest rounding mode (the default).  The system must be in round-
     to-nearest rounding mode when issuing long double arithmetic
     operations or calling any of the long double functions; otherwise,
     incorrect answers result.

   Differences between -o32, -n32, -64
     At the IRIX 6.2 release, faster and more accurate algorithms were
     implemented, and vector functions were added to the math library.  In
     order to maintain numerical compatibility with older releases, these
     changes were made only in the -n32 and -64 versions of the library and
     not in the -o32 version.  If there are differences in accuracy, this
     document describes the behavior of the -n32 and -64 versions of the
     library.

     To take advantage of the new functions and algorithms, you need to
     compile and link using either the -n32 or the -64 option.

     The -o32 version of libmx contains all routines present in the -n32
     and -64 versions of libmx except the quad precision and vector
     routines, and gives results identical to the -n32 and -64 versions.

NOTES
     Users concerned with portability to other computer systems should note
     that the long double and float versions of these functions were
     optional according to the ANSI C Programming Language Specification
     ISO/IEC 9899 : 1990 (E) and are no longer optional according to
     ISO/IEC 9899: 1999 (E).

     Long double functions have been renamed to be compliant with the
     ANSI-C standard; to be backward compatible, however, they may still be
     called with the double precision function name prefixed with a q.  The
     exceptions are functions fabsl and fmodl, which may be called with
     names qabs and qmod.

     This machine conforms to the IEEE Standard 754 for Binary Floating-
     point Arithmetic, to which only the notes for IEEE floating-point
     apply and are included here.  See the notes regarding long double
     precision below.

   IEEE STANDARD 754 Floating-point Arithmetic
     This standard has become more widely adopted than any other design for
     computer arithmetic.

     Properties of IEEE 754 Double-precision:

     * Wordsize: 64 bits, 8 bytes.  Radix: Binary.

     * Precision: 53 significant bits, roughly 16 significant decimals.  If
       x and x' are consecutive positive double-precision numbers (they
       differ by 1 ULP), then

       1.1e -16 < 0.5**53 < (x'-x)/x <= 0.5**52 < 2.3e-16

     * Range: Overflow threshold = 2.0**1024 = 1.8e308

       Underflow threshold = 0.5**1022 = 2.2e -308

       Overflow goes by default to a signed Infinity.

       Underflow is Gradual, rounding to the nearest integer multiple of
       0.5**1074 = 4.9e -324.

     * Zero is represented ambiguously as +0, or -0.  Its sign transforms
       correctly through multiplication or division, and is preserved by
       addition of zeros with like signs; but x-x yields +0 for every
       finite x.  The only operations that reveal zero's sign are division
       by zero and copysign(x,+0).  In particular, comparison (x > y, x >=
       y, etc.)  cannot be affected by the sign of zero; but if finite x =
       y then Infinity = 1/(x-y) != 1/(y-x) = -Infinity.

     * Infinity is signed. It persists when added to itself or to any
       finite number.  Its sign transforms correctly through multiplication
       and division, and (finite)/+ Infinity = +0 (nonzero)/0 = + Infinity.
       But Infinity - Infinity, Infinity*0 and Infinity/Infinity are, like
       0/0 and sqrt(-3), invalid operations that produce NaN.

     * Reserved operands:  there are 2**53-2 of them, all called NaN (Not a
       Number).  Some, called Signaling NaNs, trap any floating-point
       operation performed upon them; they could be used to mark missing or
       uninitialized values, or nonexistent elements of arrays.  The rest
       are Quiet Nans; they are the default results of Invalid Operations,
       and propagate through subsequent arithmetic operations.  If x != x
       then x is NaN; every other predicate (x > y, x = y, x < y, ...) is
       FALSE if NaN is involved.

       NOTE: Trichotomy is violated by NaN.

       Besides being FALSE, predicates that entail ordered comparison,
       rather than mere (in)equality, signal Invalid Operation when NaN is
       involved.

     * Rounding:  Every algebraic operation, (+,-, *, /, sqrt) is rounded
       by default to within half a ULP, and when the rounding error is
       exactly half a ULP then the rounded value's least significant bit is
       zero.  This kind of rounding is usually the best kind, sometimes
       provably so; for instance, for every x = 1.0, 2.0, 3.0, 4.0, ...,
       2.0**52, we find (x/3.0)*3.0 == x and (x/10.0)*10.0 == x and ...
       despite that both the quotients and the products have been rounded.
       Only rounding like IEEE 754 can do that.  But no single kind of
       rounding can be proved best for every circumstance, so IEEE 754
       provides rounding towards zero or towards +Infinity or towards
       -Infinity at the programmer's option.

     * Exceptions:  IEEE 754 recognizes five kinds of floating-point
       exceptions, listed below in declining order of probable importance.

       Exception           Default Result

       Invalid Operation   NaN or FALSE

       Overflow            +Infinity

       Divide by Zero      +Infinity

       Inexact             Rounded value

       NOTE:  An exception is not an error unless handled badly.  What
       makes a class of exceptions exceptional is that no single default
       response can be satisfactory in every instance.  On the other hand,
       if a default response will serve most instances satisfactorily, the
       unsatisfactory instances cannot justify aborting computation every
       time the exception occurs.


     For each kind of floating-point exception, IEEE 754 provides a flag
     that is raised each time its exception is signaled, and stays raised
     until the program resets it.  Programs may also test, save and restore
     a flag.  Thus, IEEE 754 provides three ways by which programs can
     handle exceptions for which the default result might be
     unsatisfactory:

     1. Test for a condition that might cause an exception later, and
        branch to avoid the exception.

     2. Test a flag to see if an exception has occurred since the program
        last reset its flag.

     3. Test a result to see if it is a value that only an exception could
        have produced.


     CAUTION: The only reliable ways to discover if underflow has occurred
     are to test if products or quotients lie closer to zero than the
     underflow threshold, or to test the Underflow flag.  (Sums and
     differences cannot underflow in IEEE 754; if x != y, then x-y is
     correct to full precision and certainly nonzero regardless of how tiny
     it may be.)


     Products and quotients that underflow gradually can lose accuracy
     gradually without vanishing, so comparing them with zero will not
     reveal the loss.  Fortunately, if a gradually underflowed value is
     destined to be added to something bigger than the underflow threshold,
     as is almost always the case, digits lost to gradual underflow will
     not be missed because they would have been rounded off anyway.  So
     gradual underflows are usually provably ignorable.  The same cannot be
     said of underflows flushed to 0.

     At the option of an implementor conforming to IEEE 754, other ways to
     cope with exceptions may be provided:

     1. ABORT.  This mechanism classifies an exception in advance as an
        incident to be handled by means traditionally associated with
        error-handling statements like ON ERROR GO TO ....  Different
        languages offer different forms of this statement, but most share
        the following characteristics:

        *  No means is provided to substitute a value for the offending
           operation's result and resume computation from what may be the
           middle of an expression.  An exceptional result is abandoned.

        *  In a subprogram that lacks an error-handling statement, an
           exception causes the subprogram to abort within whatever program
           called it, and so on back up the chain of calling subprograms
           until an error-handling statement is encountered or the whole
           task is aborted and memory is dumped.

     2. STOP.  This mechanism, requiring an interactive debugging
        environment, is more for the programmer than the program.  It
        classifies an exception in advance as a symptom of a programmer's
        error; the exception suspends execution as near as it can to the
        offending operation so that the programmer can look around to see
        how it happened.  Quite often the first several exceptions turn out
        to be quite unexceptionable, so the programmer should be able to
        resume execution after each one as if execution had not been
        stopped.

     Ideally, each elementary function should act as if it were
     indivisible, or atomic, in the following sense:

     * No exception should be signaled that is not deserved by the data
       supplied to that function.

     * Any exception signaled should be identified with that function
       rather than with one of its subroutines.

     * The internal behavior of an atomic function should not be disrupted
       when a calling program changes from one to another of the five or so
       ways of handling exceptions listed above, although the definition of
       the function may be correlated intentionally with exception
       handling.

     Ideally, every programmer should be able conveniently to turn a
     debugged subprogram into one that appears atomic to its users.  But
     simulating all three characteristics of an atomic function is still a
     tedious affair, entailing hosts of tests and saves/restores.

     Meanwhile, the functions in libm are only approximately atomic.  They
     signal no inappropriate exception except (possibly) overflow or
     underflow when a result, if properly computed, might have lain barely
     within range, and inexact in cbrt, hypot, log10 and pow when it
     happens to be exact, thanks to cancellation of errors.

     Otherwise, Invalid Operation is signaled only when any result but NaN
     would probably be misleading.  Overflow is signaled only when the
     exact result would be finite but beyond the overflow threshold.
     Divide-by a function takes exactly infinite values at finite operands.
     Underflow is signaled only when the exact result would be nonzero but
     tinier than the underflow threshold.  Inexact is signaled only when
     greater range or precision would be needed to represent the exact
     result.

   Exceptions
     The exception enables and the flags that are raised when an exception
     occurs (as well as the rounding mode), are in the floating-point
     control and status register.  This register can be read or written by
     the routines described on fpc(3C).  This register's layout is
     described in the file <sys/fpu.h>.

     A useful set of ``user trap handlers'' is available.  See sigfpe(3C).

     The raw interface to the hardware registers is only intended to be
     used by the code to implement IEEE user trap handlers.  IEEE
     floating-point exceptions are enabled by setting the enable bit for
     that exception in the floating-point control and status register.  If
     an exception then occurs the UNIX signal SIGFPE is sent to the
     process.  It is up to the signal handler to determine the instruction
     that caused the exception and to take the action specified by the
     user.

     The instruction that caused the exception is in one of two places.  If
     the floating-point board is used (the floating-point implementation
     revision register indicates this in its implementation field) then the
     instruction that caused the exception is in the floating-point
     exception instruction register.  In all other implementations the
     instruction that caused the exception is at the address of the program
     counter as modified by the branch delay bit in the cause register.
     Both the program counter and cause register are in the sigcontext
     structure passed to the signal handler (see signal(2)).

     If the program is to be continued past the instruction that caused the
     exception, the program counter in the signal context must be advanced.
     If the instruction is in a branch delay slot then the branch must be
     emulated to determine if the branch is taken and then the resulting
     program counter can be calculated (see emulate_branch(3X) and
     signal(2)).

     On systems using the R8000 processor, floating point exceptions are
     generally fatal when trapped unless the process is being run in
     precise exception mode.

PLATFORM SPECIFIC LIBRARIES
     When compiling with -n32 or -64, each processor has specially tuned,
     hardware-specific versions of libm and libfastm that the run-time
     linker will use, by default, whenever available.

     The R10000 tuned libraries are found in the directories:

          /usr/lib32/mips4/r10000/
          /usr/lib64/mips4/r10000/

     The R8000 tuned libraries are found in the directories:

          /usr/lib32/mips4/r8000/
          /usr/lib64/mips4/r8000/

     The R5000 tuned libraries are found in the directories:

          /usr/lib32/mips4/
          /usr/lib64/mips4/

     And the R4000 tuned libraries are found in the directories:

          /usr/lib32/mips3/
          /usr/lib64/mips3/

     At runtime, each program automatically uses the "best" library for the
     system on which it is executing. For example, if the executing program
     is a MIPS3 program designed to run on an r4000 processor, it will
     still use the MIPS4 R10000-tuned math library when running on an
     r10000 system.

BUGS
     When signals are appropriate, they are emitted by certain operations
     within the codes so a subroutine trace may be needed to identify the
     function with its signal. And the codes all take the IEEE 754 defaults
     for granted; this means that a decision to trap all divisions by zero
     could disrupt a code that would otherwise get correct results despite
     division by zero.

LIBRARY ROUTINES
     The following functions are available in all versions of libm, (that
     is, with the u-code compiler and the MipsPro compilers).  Routines
     marked with an asterisk (*) are also available in the libm43 library:

          acos*       erf*        jn*           tanhf
          acosf       erfc*       log*          trunc
          acosh*      exp*        log10*        truncf
          asin*       expf        logf          y0*
          asinf       expm1*      log10f        y1*
          asinh*      expm1f      log1p*        yn*
          atan*       fabsf       log1pf        lgamma*
          atan2*      floor*      pow*
          atan2f      floorf      powf
          atanf       fmod        remainder
          atanh*      fmodf       rint*
          c_abs_      fpow        scalbn*
          cabsf       fsin        signgam*
          cbrt*       fsinh       sin*
          ceil*       fsqrt       sinf
          ceilf       ftan        sinh*
          copysign    ftanh       sinhf
          cos*        ftrunc      sqrt*
          cosf        gamma*      sqrtf
          cosh*       hypot*      tan*
          coshf       j0*         tanf
          drem*       j1*         tanh*

     The following routines are available in libm for the MIPSpro compilers
     (pre-C99) and are NOT available for the u-code compilers:

          acosl      qabs        qrint       vcos
          asinl      qacos       qsigngam    vcosf
          atan2l     qasin       qsin        vexp
          atanl      qatan       qsinh       vexpf
          cabsl      qatan2      qsqrt       vfacos
          cbrtl      qcabs       qtan        vfasin
          ceill      qcbrt       qtanh       vfatan
          copysignl  qceil       qtrunc      vfcis
          coshl      qcopysign   qy0         vfcos
          cosl       qcos        qy1         vfexp
          dreml      qcosh       qyn         vflog
          erfcl      qdrem       remainderl  vflog10
          erfl       qerf        rintl       vfsin
          expm1l     qerfc       signgaml    vfsqrt
          expl       qexp        sinhl       vftan
          fabsl      qexpm1      sinl        vlog
          floorl     qfloor      sqrtl       vlog10
          fmodl      qgamma      tanhl       vlog10f
          gammal     qhypot      tanl        vlogf
          hypotl     qj0         truncl      vsin
          j0l        qj1         vacos       vsinf
          j1l        qjn         vacosf      vsqrt
          jnl        qlgamma     vasin       vsqrtf
          lgammal    qlog        vasinf      vtan
          log10l     qlog10      vatan       vtanf
          log1pl     qlog1p      vatanf      y0l
          logl       qmod        vcisf       y1l
          powl       qpow        vcis        ynl

     The following routines are available in libm for the MIPSpro
     compilers, beginning with the 7.4 release.  They are NOT available
     with either the u-code compiler or in libm43.

          acoshf     ccosh       ctan              llround
          acoshl     ccoshf      ctanf             llroundf
          asinhf     ccoshl      ctanl             llroundl
          asinhl     cexp        ctanh             log2
          atanhf     cexpf       ctanhf            log2f
          atanhl     cexpl       ctanhl            log2l
          cabs       cimag       dremf             lrint
          cabsf      cimagf      erfcf             lrintf
          cabsl      cimagl      erff              lrintl
          cacos      clog        exp2              lround
          cacosf     clogf       exp2f             lroundf
          cacosl     clogl       exp2l             lroundl
          cacosh     conj        fdim              nan
          cacoshf    conjf       fdimf             nanf
          cacoshl    conjl       fdiml             nanl
          carg       copysignf   feclearexcept     remainderf
          cargf      cpow        fegetenv          remquo
          cargl      cpowf       fegetexceptflag   remquof
          casin      cpowl       fegetround        remquol
          casinf     cproj       feholdexcept      rintf
          casinl     cprojf      feraiseexcept     rintl
          casinh     cprojl      fesetenv          round
          casinhf    creal       fesetexceptflag   roundf
          casinhl    crealf      fesetround        roundl
          catan      creall      fetestexcept      scalbln
          catanf     csin        feupdateenv       scalblnf
          catanl     csinf       fma               scalblnl
          catanh     csinl       fmaf              scalbn
          catanhf    csinh       fmal              scalbnf
          catanhl    csinhf      gammaf            scalbnl
          cbrtf      csinhl      lgammaf           signgamf
          ccos       csqrt       llrint            tgamma
          ccosf      csqrtf      llrintf           tgammaf
          ccosl      csqrtl      llrintl           tgammal

     Alternate entries exist for several routines.  The following lists
     those routines with their ANSI standard name and the alternate entry
     name:

     ANSI standard name       Alternate name

     sinf                     fsin

     asinf                    fasin

     cosf                     fcos

     acosf                    facos

     atanf                    fatan

     tanf                     ftan

     atan2f                   fatan2

     cosl                     qcos

     acosl                    qacos

     asinl                    qasin

     atanl                    qatan

     atan2l                   qatan2

     sinl                     qsin

     tanl                     qtan

     sinhf                    fsinh

     coshf                    fcosh

     tanhf                    ftanh

     coshl                    qcosh

     sinhl                    qsinh

     tanhl                    qtanh

     gammal                   qgamma

     lgammal                  qlgamma

     floorf                   ffloor

     ceilf                    fceil

     truncf                   ftrunc

     fabsl                    qabs

     ceill                    qceil

     copysignl                qcopysign

     dreml                    qdrem

     floorl                   qfloor

     fmodl                    qmod

     rintl                    qrint

     truncl                   qtrunc

     expf                     fexp

     expm1f                   fexpm1

     logf                     flog

     log10f                   flog10f

     log1pf                   flog10

     expl                     qexp

     expm1l                   qexpm1

     logl                     qlog

     log10l                   qlog10

     log1pl                   qlog1p

     powl                     qpow

     erfcl                    qerf

     erfcl                    qerfc

     cabsf                    fcabs

     hypotf                   fhypot

     hypotl                   qhypot

     j01                      qj0

     j1l                      qj1

     jnl                      qjn

     y0l                      qy0

     y1l                      qy1

     ynl                      qyn

     sqrtf                    fsqrt

     cbrtl                    qcbrt

     sqrtl                    qsqrt

SEE ALSO
     signal(2), fpc(3C), emulate_branch(3X), sigfpe(3C), matherr(3M)