@node Math
@chapter Mathematical Functions (@file{math.h})

This chapter groups a wide variety of mathematical functions.  The
corresponding definitions and declarations are in @file{math.h}.  
Two definitions from @file{math.h} are of particular interest.  

@enumerate
@item
The representation of infinity as a @code{double} is defined as
@code{HUGE_VAL}; this number is returned on overflow by many functions.

@item
The structure @code{exception} is used when you write customized error
handlers for the mathematical functions.  You can customize error
handling for most of these functions by defining your own version of
@code{matherr}; see the section on @code{matherr} for details.
@end enumerate

@cindex system calls
@cindex support subroutines
@cindex stubs
@cindex OS stubs
Since the error handling code calls @code{fputs}, the mathematical
subroutines require stubs or minimal implementations for the same list
of OS subroutines as @code{fputs}: @code{close}, @code{fstat},
@code{isatty}, @code{lseek}, @code{read}, @code{sbrk}, @code{write}.
@xref{syscalls,,System Calls, libc.info, The Red Hat newlib C Library},
for a discussion and for sample minimal implementations of these support
subroutines.

Alternative declarations of the mathematical functions, which exploit
specific machine capabilities to operate faster---but generally have
less error checking and may reflect additional limitations on some
machines---are available when you include @file{fastmath.h} instead of
@file{math.h}.

@menu 
* version::	Version of library
* Function acos::	Arccosine
* Function acosh::	Inverse hyperbolic cosine
* Function asin::	Arcsine
* Function asinh::	Inverse hyperbolic sine
* Function atan::	Arctangent
* Function atan2::	Arctangent of y/x
* Function atanh::	Inverse hyperbolic tangent
* Function jN::	        Bessel functions  (jN, yN)
* Function cbrt::	Cube root
* Function copysign::	Sign of Y, magnitude of X
* Function cosh::	Hyperbolic cosine
* Function erf::		Error function  (erf, erfc)
* Function exp::		Exponential
* Function expm1::	Exponential of x, - 1
* Function fabs::	Absolute value (magnitude)
* Function floor::	Floor and ceiling  (floor, ceil)
* Function fmod::	Floating-point remainder (modulo)
* Function frexp::	Split floating-point number
* Function gamma::	Logarithmic gamma function
* Function hypot::	Distance from origin
* Function ilogb::	Get exponent
* Function infinity::	Floating infinity
* Function isnan::	Check type of number
* Function ldexp::	Load exponent
* Function log::		Natural logarithms
* Function log10::	Base 10 logarithms
* Function log1p::	Log of 1 + X
* Function matherr::	Modifiable math error handler
* Function modf::	Split fractional and integer parts
* Function nan::		Floating Not a Number
* Function nextafter::	Get next representable number
* Function pow::		X to the power Y
* Function remainder::	remainder of X divided by Y
* Function scalbn::	scalbn
* Function sin::		Sine or cosine (sin, cos)
* Function sinh::	Hyperbolic sine
* Function sqrt::	Positive square root
* Function tan::		Tangent
* Function tanh::	Hyperbolic tangent
@end menu

@page
@node version
@section Version of library

There are four different versions of the math library routines: IEEE,
POSIX, X/Open, or SVID.  The version may be selected at runtime by
setting the global variable @code{_LIB_VERSION}, defined in
@file{math.h}.  It may be set to one of the following constants defined
in @file{math.h}: @code{_IEEE_}, @code{_POSIX_}, @code{_XOPEN_}, or
@code{_SVID_}.  The @code{_LIB_VERSION} variable is not specific to any
thread, and changing it will affect all threads.

The versions of the library differ only in how errors are handled.

In IEEE mode, the @code{matherr} function is never called, no warning
messages are printed, and @code{errno} is never set.

In POSIX mode, @code{errno} is set correctly, but the @code{matherr}
function is never called and no warning messages are printed.

In X/Open mode, @code{errno} is set correctly, and @code{matherr} is
called, but warning message are not printed.

In SVID mode, functions which overflow return 3.40282346638528860e+38,
the maximum single-precision floating-point value, rather than infinity.
Also, @code{errno} is set correctly, @code{matherr} is called, and, if
@code{matherr} returns 0, warning messages are printed for some errors.
For example, by default @samp{log(-1.0)} writes this message on standard
error output:

@example
log: DOMAIN error
@end example

The library is set to X/Open mode by default.

@page
@include mathfp/sacos.def

@page
@include mathfp/eacosh.def

@page
@include mathfp/sasine.def

@page
@include mathfp/sasinh.def

@page
@include mathfp/satan.def

@page
@include mathfp/satan2.def

@page
@include mathfp/eatanh.def

@page
@include mathfp/wjn.def

@page
@include common/scbrt.def

@page
@include common/scopysign.def

@page
@include mathfp/scosh.def

@page
@include mathfp/serf.def

@page
@include mathfp/sexp.def

@page
@include common/sexpm1.def

@page
@include mathfp/sfabs.def

@page
@include mathfp/sfloor.def

@page
@include mathfp/sfmod.def

@page
@include mathfp/sfrexp.def

@page
@include mathfp/erlgamma.def

@page
@include mathfp/ehypot.def

@page
@include common/silogb.def

@page
@include common/sinfinity.def

@page
@include common/sisnan.def

@page
@include mathfp/sldexp.def

@page
@include mathfp/slogarithm.def

@page
@include mathfp/slog10.def

@page
@include common/slog1p.def

@page
@include common/smatherr.def

@page
@include common/smodf.def

@page
@include common/snan.def

@page
@include common/snextafter.def

@page
@include mathfp/spow.def

@page
@include mathfp/eremainder.def

@page
@include common/sscalbn.def

@page
@include mathfp/ssqrt.def

@page
@include mathfp/ssine.def

@page
@include mathfp/ssineh.def

@page
@include mathfp/stan.def

@page
@include mathfp/stanh.def
