@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 * 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 common/scbrt.def @page @include common/scopysign.def @page @include math/wcosh.def @page @include math/serf.def @page @include math/wexp.def @page @include common/sexpm1.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 common/silogb.def @page @include common/sinfinity.def @page @include math/sisnan.def @page @include math/sldexp.def @page @include math/wlog.def @page @include math/wlog10.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 math/wpow.def @page @include math/wremainder.def @page @include common/sscalbn.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