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

@page
@include math/wacosh.def

@page
@include math/wasin.def

@page
@include math/sasinh.def

@page
@include math/satan.def

@page
@include math/watan2.def

@page
@include math/watanh.def

@page
@include math/wj0.def

@page
@include math/wcosh.def

@page
@include math/serf.def

@page
@include math/wexp.def

@page
@include math/sfabs.def

@page
@include math/sfloor.def

@page
@include math/wfmod.def

@page
@include math/sfrexp.def

@page
@include math/wgamma.def

@page
@include math/whypot.def

@page
@include math/sisnan.def

@page
@include math/sldexp.def

@page
@include math/wlog.def

@page
@include math/wlog10.def

@page
@include math/wpow.def

@page
@include math/wremainder.def

@page
@include math/wsqrt.def

@page
@include math/ssin.def

@page
@include math/wsinh.def

@page
@include math/stan.def

@page
@include math/stanh.def
