1@c We need some definitions here. 2@ifclear mult 3@ifhtml 4@set mult @U{00B7} 5@set infty @U{221E} 6@set pie @U{03C0} 7@end ifhtml 8@iftex 9@set mult @cdot 10@set infty @infty 11@end iftex 12@ifclear mult 13@set mult * 14@set infty oo 15@set pie pi 16@end ifclear 17@macro mul 18@value{mult} 19@end macro 20@macro infinity 21@value{infty} 22@end macro 23@ifnottex 24@macro pi 25@value{pie} 26@end macro 27@end ifnottex 28@end ifclear 29 30@node Mathematics, Arithmetic, Syslog, Top 31@c %MENU% Math functions, useful constants, random numbers 32@chapter Mathematics 33 34This chapter contains information about functions for performing 35mathematical computations, such as trigonometric functions. Most of 36these functions have prototypes declared in the header file 37@file{math.h}. The complex-valued functions are defined in 38@file{complex.h}. 39@pindex math.h 40@pindex complex.h 41 42All mathematical functions which take a floating-point argument 43have three variants, one each for @code{double}, @code{float}, and 44@code{long double} arguments. The @code{double} versions are mostly 45defined in @w{ISO C89}. The @code{float} and @code{long double} 46versions are from the numeric extensions to C included in @w{ISO C99}. 47 48Which of the three versions of a function should be used depends on the 49situation. For most calculations, the @code{float} functions are the 50fastest. On the other hand, the @code{long double} functions have the 51highest precision. @code{double} is somewhere in between. It is 52usually wise to pick the narrowest type that can accommodate your data. 53Not all machines have a distinct @code{long double} type; it may be the 54same as @code{double}. 55 56@Theglibc{} also provides @code{_Float@var{N}} and 57@code{_Float@var{N}x} types. These types are defined in @w{ISO/IEC TS 5818661-3}, which extends @w{ISO C} and defines floating-point types that 59are not machine-dependent. When such a type, such as @code{_Float128}, 60is supported by @theglibc{}, extra variants for most of the mathematical 61functions provided for @code{double}, @code{float}, and @code{long 62double} are also provided for the supported type. Throughout this 63manual, the @code{_Float@var{N}} and @code{_Float@var{N}x} variants of 64these functions are described along with the @code{double}, 65@code{float}, and @code{long double} variants and they come from 66@w{ISO/IEC TS 18661-3}, unless explicitly stated otherwise. 67 68Support for @code{_Float@var{N}} or @code{_Float@var{N}x} types is 69provided for @code{_Float32}, @code{_Float64} and @code{_Float32x} on 70all platforms. 71It is also provided for @code{_Float128} and @code{_Float64x} on 72powerpc64le (PowerPC 64-bits little-endian), x86_64, x86, ia64, 73aarch64, alpha, mips64, riscv, s390 and sparc. 74 75@menu 76* Mathematical Constants:: Precise numeric values for often-used 77 constants. 78* Trig Functions:: Sine, cosine, tangent, and friends. 79* Inverse Trig Functions:: Arcsine, arccosine, etc. 80* Exponents and Logarithms:: Also pow and sqrt. 81* Hyperbolic Functions:: sinh, cosh, tanh, etc. 82* Special Functions:: Bessel, gamma, erf. 83* Errors in Math Functions:: Known Maximum Errors in Math Functions. 84* Pseudo-Random Numbers:: Functions for generating pseudo-random 85 numbers. 86* FP Function Optimizations:: Fast code or small code. 87@end menu 88 89@node Mathematical Constants 90@section Predefined Mathematical Constants 91@cindex constants 92@cindex mathematical constants 93 94The header @file{math.h} defines several useful mathematical constants. 95All values are defined as preprocessor macros starting with @code{M_}. 96The values provided are: 97 98@vtable @code 99@item M_E 100The base of natural logarithms. 101@item M_LOG2E 102The logarithm to base @code{2} of @code{M_E}. 103@item M_LOG10E 104The logarithm to base @code{10} of @code{M_E}. 105@item M_LN2 106The natural logarithm of @code{2}. 107@item M_LN10 108The natural logarithm of @code{10}. 109@item M_PI 110Pi, the ratio of a circle's circumference to its diameter. 111@item M_PI_2 112Pi divided by two. 113@item M_PI_4 114Pi divided by four. 115@item M_1_PI 116The reciprocal of pi (1/pi) 117@item M_2_PI 118Two times the reciprocal of pi. 119@item M_2_SQRTPI 120Two times the reciprocal of the square root of pi. 121@item M_SQRT2 122The square root of two. 123@item M_SQRT1_2 124The reciprocal of the square root of two (also the square root of 1/2). 125@end vtable 126 127These constants come from the Unix98 standard and were also available in 1284.4BSD; therefore they are only defined if 129@code{_XOPEN_SOURCE=500}, or a more general feature select macro, is 130defined. The default set of features includes these constants. 131@xref{Feature Test Macros}. 132 133All values are of type @code{double}. As an extension, @theglibc{} 134also defines these constants with type @code{long double}. The 135@code{long double} macros have a lowercase @samp{l} appended to their 136names: @code{M_El}, @code{M_PIl}, and so forth. These are only 137available if @code{_GNU_SOURCE} is defined. 138 139Likewise, @theglibc{} also defines these constants with the types 140@code{_Float@var{N}} and @code{_Float@var{N}x} for the machines that 141have support for such types enabled (@pxref{Mathematics}) and if 142@code{_GNU_SOURCE} is defined. When available, the macros names are 143appended with @samp{f@var{N}} or @samp{f@var{N}x}, such as @samp{f128} 144for the type @code{_Float128}. 145 146@vindex PI 147@emph{Note:} Some programs use a constant named @code{PI} which has the 148same value as @code{M_PI}. This constant is not standard; it may have 149appeared in some old AT&T headers, and is mentioned in Stroustrup's book 150on C++. It infringes on the user's name space, so @theglibc{} 151does not define it. Fixing programs written to expect it is simple: 152replace @code{PI} with @code{M_PI} throughout, or put @samp{-DPI=M_PI} 153on the compiler command line. 154 155@node Trig Functions 156@section Trigonometric Functions 157@cindex trigonometric functions 158 159These are the familiar @code{sin}, @code{cos}, and @code{tan} functions. 160The arguments to all of these functions are in units of radians; recall 161that pi radians equals 180 degrees. 162 163@cindex pi (trigonometric constant) 164The math library normally defines @code{M_PI} to a @code{double} 165approximation of pi. If strict ISO and/or POSIX compliance 166are requested this constant is not defined, but you can easily define it 167yourself: 168 169@smallexample 170#define M_PI 3.14159265358979323846264338327 171@end smallexample 172 173@noindent 174You can also compute the value of pi with the expression @code{acos 175(-1.0)}. 176 177@deftypefun double sin (double @var{x}) 178@deftypefunx float sinf (float @var{x}) 179@deftypefunx {long double} sinl (long double @var{x}) 180@deftypefunx _FloatN sinfN (_Float@var{N} @var{x}) 181@deftypefunx _FloatNx sinfNx (_Float@var{N}x @var{x}) 182@standards{ISO, math.h} 183@standardsx{sinfN, TS 18661-3:2015, math.h} 184@standardsx{sinfNx, TS 18661-3:2015, math.h} 185@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 186These functions return the sine of @var{x}, where @var{x} is given in 187radians. The return value is in the range @code{-1} to @code{1}. 188@end deftypefun 189 190@deftypefun double cos (double @var{x}) 191@deftypefunx float cosf (float @var{x}) 192@deftypefunx {long double} cosl (long double @var{x}) 193@deftypefunx _FloatN cosfN (_Float@var{N} @var{x}) 194@deftypefunx _FloatNx cosfNx (_Float@var{N}x @var{x}) 195@standards{ISO, math.h} 196@standardsx{cosfN, TS 18661-3:2015, math.h} 197@standardsx{cosfNx, TS 18661-3:2015, math.h} 198@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 199These functions return the cosine of @var{x}, where @var{x} is given in 200radians. The return value is in the range @code{-1} to @code{1}. 201@end deftypefun 202 203@deftypefun double tan (double @var{x}) 204@deftypefunx float tanf (float @var{x}) 205@deftypefunx {long double} tanl (long double @var{x}) 206@deftypefunx _FloatN tanfN (_Float@var{N} @var{x}) 207@deftypefunx _FloatNx tanfNx (_Float@var{N}x @var{x}) 208@standards{ISO, math.h} 209@standardsx{tanfN, TS 18661-3:2015, math.h} 210@standardsx{tanfNx, TS 18661-3:2015, math.h} 211@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 212These functions return the tangent of @var{x}, where @var{x} is given in 213radians. 214 215Mathematically, the tangent function has singularities at odd multiples 216of pi/2. If the argument @var{x} is too close to one of these 217singularities, @code{tan} will signal overflow. 218@end deftypefun 219 220In many applications where @code{sin} and @code{cos} are used, the sine 221and cosine of the same angle are needed at the same time. It is more 222efficient to compute them simultaneously, so the library provides a 223function to do that. 224 225@deftypefun void sincos (double @var{x}, double *@var{sinx}, double *@var{cosx}) 226@deftypefunx void sincosf (float @var{x}, float *@var{sinx}, float *@var{cosx}) 227@deftypefunx void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx}) 228@deftypefunx _FloatN sincosfN (_Float@var{N} @var{x}, _Float@var{N} *@var{sinx}, _Float@var{N} *@var{cosx}) 229@deftypefunx _FloatNx sincosfNx (_Float@var{N}x @var{x}, _Float@var{N}x *@var{sinx}, _Float@var{N}x *@var{cosx}) 230@standards{GNU, math.h} 231@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 232These functions return the sine of @var{x} in @code{*@var{sinx}} and the 233cosine of @var{x} in @code{*@var{cosx}}, where @var{x} is given in 234radians. Both values, @code{*@var{sinx}} and @code{*@var{cosx}}, are in 235the range of @code{-1} to @code{1}. 236 237All these functions, including the @code{_Float@var{N}} and 238@code{_Float@var{N}x} variants, are GNU extensions. Portable programs 239should be prepared to cope with their absence. 240@end deftypefun 241 242@cindex complex trigonometric functions 243 244@w{ISO C99} defines variants of the trig functions which work on 245complex numbers. @Theglibc{} provides these functions, but they 246are only useful if your compiler supports the new complex types defined 247by the standard. 248@c XXX Change this when gcc is fixed. -zw 249(As of this writing GCC supports complex numbers, but there are bugs in 250the implementation.) 251 252@deftypefun {complex double} csin (complex double @var{z}) 253@deftypefunx {complex float} csinf (complex float @var{z}) 254@deftypefunx {complex long double} csinl (complex long double @var{z}) 255@deftypefunx {complex _FloatN} csinfN (complex _Float@var{N} @var{z}) 256@deftypefunx {complex _FloatNx} csinfNx (complex _Float@var{N}x @var{z}) 257@standards{ISO, complex.h} 258@standardsx{csinfN, TS 18661-3:2015, complex.h} 259@standardsx{csinfNx, TS 18661-3:2015, complex.h} 260@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 261@c There are calls to nan* that could trigger @mtslocale if they didn't get 262@c empty strings. 263These functions return the complex sine of @var{z}. 264The mathematical definition of the complex sine is 265 266@ifnottex 267@math{sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i))}. 268@end ifnottex 269@tex 270$$\sin(z) = {1\over 2i} (e^{zi} - e^{-zi})$$ 271@end tex 272@end deftypefun 273 274@deftypefun {complex double} ccos (complex double @var{z}) 275@deftypefunx {complex float} ccosf (complex float @var{z}) 276@deftypefunx {complex long double} ccosl (complex long double @var{z}) 277@deftypefunx {complex _FloatN} ccosfN (complex _Float@var{N} @var{z}) 278@deftypefunx {complex _FloatNx} ccosfNx (complex _Float@var{N}x @var{z}) 279@standards{ISO, complex.h} 280@standardsx{ccosfN, TS 18661-3:2015, complex.h} 281@standardsx{ccosfNx, TS 18661-3:2015, complex.h} 282@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 283These functions return the complex cosine of @var{z}. 284The mathematical definition of the complex cosine is 285 286@ifnottex 287@math{cos (z) = 1/2 * (exp (z*i) + exp (-z*i))} 288@end ifnottex 289@tex 290$$\cos(z) = {1\over 2} (e^{zi} + e^{-zi})$$ 291@end tex 292@end deftypefun 293 294@deftypefun {complex double} ctan (complex double @var{z}) 295@deftypefunx {complex float} ctanf (complex float @var{z}) 296@deftypefunx {complex long double} ctanl (complex long double @var{z}) 297@deftypefunx {complex _FloatN} ctanfN (complex _Float@var{N} @var{z}) 298@deftypefunx {complex _FloatNx} ctanfNx (complex _Float@var{N}x @var{z}) 299@standards{ISO, complex.h} 300@standardsx{ctanfN, TS 18661-3:2015, complex.h} 301@standardsx{ctanfNx, TS 18661-3:2015, complex.h} 302@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 303These functions return the complex tangent of @var{z}. 304The mathematical definition of the complex tangent is 305 306@ifnottex 307@math{tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))} 308@end ifnottex 309@tex 310$$\tan(z) = -i \cdot {e^{zi} - e^{-zi}\over e^{zi} + e^{-zi}}$$ 311@end tex 312 313@noindent 314The complex tangent has poles at @math{pi/2 + 2n}, where @math{n} is an 315integer. @code{ctan} may signal overflow if @var{z} is too close to a 316pole. 317@end deftypefun 318 319 320@node Inverse Trig Functions 321@section Inverse Trigonometric Functions 322@cindex inverse trigonometric functions 323 324These are the usual arcsine, arccosine and arctangent functions, 325which are the inverses of the sine, cosine and tangent functions 326respectively. 327 328@deftypefun double asin (double @var{x}) 329@deftypefunx float asinf (float @var{x}) 330@deftypefunx {long double} asinl (long double @var{x}) 331@deftypefunx _FloatN asinfN (_Float@var{N} @var{x}) 332@deftypefunx _FloatNx asinfNx (_Float@var{N}x @var{x}) 333@standards{ISO, math.h} 334@standardsx{asinfN, TS 18661-3:2015, math.h} 335@standardsx{asinfNx, TS 18661-3:2015, math.h} 336@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 337These functions compute the arcsine of @var{x}---that is, the value whose 338sine is @var{x}. The value is in units of radians. Mathematically, 339there are infinitely many such values; the one actually returned is the 340one between @code{-pi/2} and @code{pi/2} (inclusive). 341 342The arcsine function is defined mathematically only 343over the domain @code{-1} to @code{1}. If @var{x} is outside the 344domain, @code{asin} signals a domain error. 345@end deftypefun 346 347@deftypefun double acos (double @var{x}) 348@deftypefunx float acosf (float @var{x}) 349@deftypefunx {long double} acosl (long double @var{x}) 350@deftypefunx _FloatN acosfN (_Float@var{N} @var{x}) 351@deftypefunx _FloatNx acosfNx (_Float@var{N}x @var{x}) 352@standards{ISO, math.h} 353@standardsx{acosfN, TS 18661-3:2015, math.h} 354@standardsx{acosfNx, TS 18661-3:2015, math.h} 355@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 356These functions compute the arccosine of @var{x}---that is, the value 357whose cosine is @var{x}. The value is in units of radians. 358Mathematically, there are infinitely many such values; the one actually 359returned is the one between @code{0} and @code{pi} (inclusive). 360 361The arccosine function is defined mathematically only 362over the domain @code{-1} to @code{1}. If @var{x} is outside the 363domain, @code{acos} signals a domain error. 364@end deftypefun 365 366@deftypefun double atan (double @var{x}) 367@deftypefunx float atanf (float @var{x}) 368@deftypefunx {long double} atanl (long double @var{x}) 369@deftypefunx _FloatN atanfN (_Float@var{N} @var{x}) 370@deftypefunx _FloatNx atanfNx (_Float@var{N}x @var{x}) 371@standards{ISO, math.h} 372@standardsx{atanfN, TS 18661-3:2015, math.h} 373@standardsx{atanfNx, TS 18661-3:2015, math.h} 374@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 375These functions compute the arctangent of @var{x}---that is, the value 376whose tangent is @var{x}. The value is in units of radians. 377Mathematically, there are infinitely many such values; the one actually 378returned is the one between @code{-pi/2} and @code{pi/2} (inclusive). 379@end deftypefun 380 381@deftypefun double atan2 (double @var{y}, double @var{x}) 382@deftypefunx float atan2f (float @var{y}, float @var{x}) 383@deftypefunx {long double} atan2l (long double @var{y}, long double @var{x}) 384@deftypefunx _FloatN atan2fN (_Float@var{N} @var{y}, _Float@var{N} @var{x}) 385@deftypefunx _FloatNx atan2fNx (_Float@var{N}x @var{y}, _Float@var{N}x @var{x}) 386@standards{ISO, math.h} 387@standardsx{atan2fN, TS 18661-3:2015, math.h} 388@standardsx{atan2fNx, TS 18661-3:2015, math.h} 389@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 390This function computes the arctangent of @var{y}/@var{x}, but the signs 391of both arguments are used to determine the quadrant of the result, and 392@var{x} is permitted to be zero. The return value is given in radians 393and is in the range @code{-pi} to @code{pi}, inclusive. 394 395If @var{x} and @var{y} are coordinates of a point in the plane, 396@code{atan2} returns the signed angle between the line from the origin 397to that point and the x-axis. Thus, @code{atan2} is useful for 398converting Cartesian coordinates to polar coordinates. (To compute the 399radial coordinate, use @code{hypot}; see @ref{Exponents and 400Logarithms}.) 401 402@c This is experimentally true. Should it be so? -zw 403If both @var{x} and @var{y} are zero, @code{atan2} returns zero. 404@end deftypefun 405 406@cindex inverse complex trigonometric functions 407@w{ISO C99} defines complex versions of the inverse trig functions. 408 409@deftypefun {complex double} casin (complex double @var{z}) 410@deftypefunx {complex float} casinf (complex float @var{z}) 411@deftypefunx {complex long double} casinl (complex long double @var{z}) 412@deftypefunx {complex _FloatN} casinfN (complex _Float@var{N} @var{z}) 413@deftypefunx {complex _FloatNx} casinfNx (complex _Float@var{N}x @var{z}) 414@standards{ISO, complex.h} 415@standardsx{casinfN, TS 18661-3:2015, complex.h} 416@standardsx{casinfNx, TS 18661-3:2015, complex.h} 417@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 418These functions compute the complex arcsine of @var{z}---that is, the 419value whose sine is @var{z}. The value returned is in radians. 420 421Unlike the real-valued functions, @code{casin} is defined for all 422values of @var{z}. 423@end deftypefun 424 425@deftypefun {complex double} cacos (complex double @var{z}) 426@deftypefunx {complex float} cacosf (complex float @var{z}) 427@deftypefunx {complex long double} cacosl (complex long double @var{z}) 428@deftypefunx {complex _FloatN} cacosfN (complex _Float@var{N} @var{z}) 429@deftypefunx {complex _FloatNx} cacosfNx (complex _Float@var{N}x @var{z}) 430@standards{ISO, complex.h} 431@standardsx{cacosfN, TS 18661-3:2015, complex.h} 432@standardsx{cacosfNx, TS 18661-3:2015, complex.h} 433@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 434These functions compute the complex arccosine of @var{z}---that is, the 435value whose cosine is @var{z}. The value returned is in radians. 436 437Unlike the real-valued functions, @code{cacos} is defined for all 438values of @var{z}. 439@end deftypefun 440 441 442@deftypefun {complex double} catan (complex double @var{z}) 443@deftypefunx {complex float} catanf (complex float @var{z}) 444@deftypefunx {complex long double} catanl (complex long double @var{z}) 445@deftypefunx {complex _FloatN} catanfN (complex _Float@var{N} @var{z}) 446@deftypefunx {complex _FloatNx} catanfNx (complex _Float@var{N}x @var{z}) 447@standards{ISO, complex.h} 448@standardsx{catanfN, TS 18661-3:2015, complex.h} 449@standardsx{catanfNx, TS 18661-3:2015, complex.h} 450@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 451These functions compute the complex arctangent of @var{z}---that is, 452the value whose tangent is @var{z}. The value is in units of radians. 453@end deftypefun 454 455 456@node Exponents and Logarithms 457@section Exponentiation and Logarithms 458@cindex exponentiation functions 459@cindex power functions 460@cindex logarithm functions 461 462@deftypefun double exp (double @var{x}) 463@deftypefunx float expf (float @var{x}) 464@deftypefunx {long double} expl (long double @var{x}) 465@deftypefunx _FloatN expfN (_Float@var{N} @var{x}) 466@deftypefunx _FloatNx expfNx (_Float@var{N}x @var{x}) 467@standards{ISO, math.h} 468@standardsx{expfN, TS 18661-3:2015, math.h} 469@standardsx{expfNx, TS 18661-3:2015, math.h} 470@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 471These functions compute @code{e} (the base of natural logarithms) raised 472to the power @var{x}. 473 474If the magnitude of the result is too large to be representable, 475@code{exp} signals overflow. 476@end deftypefun 477 478@deftypefun double exp2 (double @var{x}) 479@deftypefunx float exp2f (float @var{x}) 480@deftypefunx {long double} exp2l (long double @var{x}) 481@deftypefunx _FloatN exp2fN (_Float@var{N} @var{x}) 482@deftypefunx _FloatNx exp2fNx (_Float@var{N}x @var{x}) 483@standards{ISO, math.h} 484@standardsx{exp2fN, TS 18661-3:2015, math.h} 485@standardsx{exp2fNx, TS 18661-3:2015, math.h} 486@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 487These functions compute @code{2} raised to the power @var{x}. 488Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}. 489@end deftypefun 490 491@deftypefun double exp10 (double @var{x}) 492@deftypefunx float exp10f (float @var{x}) 493@deftypefunx {long double} exp10l (long double @var{x}) 494@deftypefunx _FloatN exp10fN (_Float@var{N} @var{x}) 495@deftypefunx _FloatNx exp10fNx (_Float@var{N}x @var{x}) 496@standards{ISO, math.h} 497@standardsx{exp10fN, TS 18661-4:2015, math.h} 498@standardsx{exp10fNx, TS 18661-4:2015, math.h} 499@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 500These functions compute @code{10} raised to the power @var{x}. 501Mathematically, @code{exp10 (x)} is the same as @code{exp (x * log (10))}. 502 503The @code{exp10} functions are from TS 18661-4:2015. 504@end deftypefun 505 506 507@deftypefun double log (double @var{x}) 508@deftypefunx float logf (float @var{x}) 509@deftypefunx {long double} logl (long double @var{x}) 510@deftypefunx _FloatN logfN (_Float@var{N} @var{x}) 511@deftypefunx _FloatNx logfNx (_Float@var{N}x @var{x}) 512@standards{ISO, math.h} 513@standardsx{logfN, TS 18661-3:2015, math.h} 514@standardsx{logfNx, TS 18661-3:2015, math.h} 515@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 516These functions compute the natural logarithm of @var{x}. @code{exp (log 517(@var{x}))} equals @var{x}, exactly in mathematics and approximately in 518C. 519 520If @var{x} is negative, @code{log} signals a domain error. If @var{x} 521is zero, it returns negative infinity; if @var{x} is too close to zero, 522it may signal overflow. 523@end deftypefun 524 525@deftypefun double log10 (double @var{x}) 526@deftypefunx float log10f (float @var{x}) 527@deftypefunx {long double} log10l (long double @var{x}) 528@deftypefunx _FloatN log10fN (_Float@var{N} @var{x}) 529@deftypefunx _FloatNx log10fNx (_Float@var{N}x @var{x}) 530@standards{ISO, math.h} 531@standardsx{log10fN, TS 18661-3:2015, math.h} 532@standardsx{log10fNx, TS 18661-3:2015, math.h} 533@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 534These functions return the base-10 logarithm of @var{x}. 535@code{log10 (@var{x})} equals @code{log (@var{x}) / log (10)}. 536 537@end deftypefun 538 539@deftypefun double log2 (double @var{x}) 540@deftypefunx float log2f (float @var{x}) 541@deftypefunx {long double} log2l (long double @var{x}) 542@deftypefunx _FloatN log2fN (_Float@var{N} @var{x}) 543@deftypefunx _FloatNx log2fNx (_Float@var{N}x @var{x}) 544@standards{ISO, math.h} 545@standardsx{log2fN, TS 18661-3:2015, math.h} 546@standardsx{log2fNx, TS 18661-3:2015, math.h} 547@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 548These functions return the base-2 logarithm of @var{x}. 549@code{log2 (@var{x})} equals @code{log (@var{x}) / log (2)}. 550@end deftypefun 551 552@deftypefun double logb (double @var{x}) 553@deftypefunx float logbf (float @var{x}) 554@deftypefunx {long double} logbl (long double @var{x}) 555@deftypefunx _FloatN logbfN (_Float@var{N} @var{x}) 556@deftypefunx _FloatNx logbfNx (_Float@var{N}x @var{x}) 557@standards{ISO, math.h} 558@standardsx{logbfN, TS 18661-3:2015, math.h} 559@standardsx{logbfNx, TS 18661-3:2015, math.h} 560@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 561These functions extract the exponent of @var{x} and return it as a 562floating-point value. If @code{FLT_RADIX} is two, @code{logb} is equal 563to @code{floor (log2 (x))}, except it's probably faster. 564 565If @var{x} is de-normalized, @code{logb} returns the exponent @var{x} 566would have if it were normalized. If @var{x} is infinity (positive or 567negative), @code{logb} returns @math{@infinity{}}. If @var{x} is zero, 568@code{logb} returns @math{@infinity{}}. It does not signal. 569@end deftypefun 570 571@deftypefun int ilogb (double @var{x}) 572@deftypefunx int ilogbf (float @var{x}) 573@deftypefunx int ilogbl (long double @var{x}) 574@deftypefunx int ilogbfN (_Float@var{N} @var{x}) 575@deftypefunx int ilogbfNx (_Float@var{N}x @var{x}) 576@deftypefunx {long int} llogb (double @var{x}) 577@deftypefunx {long int} llogbf (float @var{x}) 578@deftypefunx {long int} llogbl (long double @var{x}) 579@deftypefunx {long int} llogbfN (_Float@var{N} @var{x}) 580@deftypefunx {long int} llogbfNx (_Float@var{N}x @var{x}) 581@standards{ISO, math.h} 582@standardsx{ilogbfN, TS 18661-3:2015, math.h} 583@standardsx{ilogbfNx, TS 18661-3:2015, math.h} 584@standardsx{llogbfN, TS 18661-3:2015, math.h} 585@standardsx{llogbfNx, TS 18661-3:2015, math.h} 586@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 587These functions are equivalent to the corresponding @code{logb} 588functions except that they return signed integer values. The 589@code{ilogb}, @code{ilogbf}, and @code{ilogbl} functions are from ISO 590C99; the @code{llogb}, @code{llogbf}, @code{llogbl} functions are from 591TS 18661-1:2014; the @code{ilogbfN}, @code{ilogbfNx}, @code{llogbfN}, 592and @code{llogbfNx} functions are from TS 18661-3:2015. 593@end deftypefun 594 595@noindent 596Since integers cannot represent infinity and NaN, @code{ilogb} instead 597returns an integer that can't be the exponent of a normal floating-point 598number. @file{math.h} defines constants so you can check for this. 599 600@deftypevr Macro int FP_ILOGB0 601@standards{ISO, math.h} 602@code{ilogb} returns this value if its argument is @code{0}. The 603numeric value is either @code{INT_MIN} or @code{-INT_MAX}. 604 605This macro is defined in @w{ISO C99}. 606@end deftypevr 607 608@deftypevr Macro {long int} FP_LLOGB0 609@standards{ISO, math.h} 610@code{llogb} returns this value if its argument is @code{0}. The 611numeric value is either @code{LONG_MIN} or @code{-LONG_MAX}. 612 613This macro is defined in TS 18661-1:2014. 614@end deftypevr 615 616@deftypevr Macro int FP_ILOGBNAN 617@standards{ISO, math.h} 618@code{ilogb} returns this value if its argument is @code{NaN}. The 619numeric value is either @code{INT_MIN} or @code{INT_MAX}. 620 621This macro is defined in @w{ISO C99}. 622@end deftypevr 623 624@deftypevr Macro {long int} FP_LLOGBNAN 625@standards{ISO, math.h} 626@code{llogb} returns this value if its argument is @code{NaN}. The 627numeric value is either @code{LONG_MIN} or @code{LONG_MAX}. 628 629This macro is defined in TS 18661-1:2014. 630@end deftypevr 631 632These values are system specific. They might even be the same. The 633proper way to test the result of @code{ilogb} is as follows: 634 635@smallexample 636i = ilogb (f); 637if (i == FP_ILOGB0 || i == FP_ILOGBNAN) 638 @{ 639 if (isnan (f)) 640 @{ 641 /* @r{Handle NaN.} */ 642 @} 643 else if (f == 0.0) 644 @{ 645 /* @r{Handle 0.0.} */ 646 @} 647 else 648 @{ 649 /* @r{Some other value with large exponent,} 650 @r{perhaps +Inf.} */ 651 @} 652 @} 653@end smallexample 654 655@deftypefun double pow (double @var{base}, double @var{power}) 656@deftypefunx float powf (float @var{base}, float @var{power}) 657@deftypefunx {long double} powl (long double @var{base}, long double @var{power}) 658@deftypefunx _FloatN powfN (_Float@var{N} @var{base}, _Float@var{N} @var{power}) 659@deftypefunx _FloatNx powfNx (_Float@var{N}x @var{base}, _Float@var{N}x @var{power}) 660@standards{ISO, math.h} 661@standardsx{powfN, TS 18661-3:2015, math.h} 662@standardsx{powfNx, TS 18661-3:2015, math.h} 663@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 664These are general exponentiation functions, returning @var{base} raised 665to @var{power}. 666 667Mathematically, @code{pow} would return a complex number when @var{base} 668is negative and @var{power} is not an integral value. @code{pow} can't 669do that, so instead it signals a domain error. @code{pow} may also 670underflow or overflow the destination type. 671@end deftypefun 672 673@cindex square root function 674@deftypefun double sqrt (double @var{x}) 675@deftypefunx float sqrtf (float @var{x}) 676@deftypefunx {long double} sqrtl (long double @var{x}) 677@deftypefunx _FloatN sqrtfN (_Float@var{N} @var{x}) 678@deftypefunx _FloatNx sqrtfNx (_Float@var{N}x @var{x}) 679@standards{ISO, math.h} 680@standardsx{sqrtfN, TS 18661-3:2015, math.h} 681@standardsx{sqrtfNx, TS 18661-3:2015, math.h} 682@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 683These functions return the nonnegative square root of @var{x}. 684 685If @var{x} is negative, @code{sqrt} signals a domain error. 686Mathematically, it should return a complex number. 687@end deftypefun 688 689@cindex cube root function 690@deftypefun double cbrt (double @var{x}) 691@deftypefunx float cbrtf (float @var{x}) 692@deftypefunx {long double} cbrtl (long double @var{x}) 693@deftypefunx _FloatN cbrtfN (_Float@var{N} @var{x}) 694@deftypefunx _FloatNx cbrtfNx (_Float@var{N}x @var{x}) 695@standards{BSD, math.h} 696@standardsx{cbrtfN, TS 18661-3:2015, math.h} 697@standardsx{cbrtfNx, TS 18661-3:2015, math.h} 698@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 699These functions return the cube root of @var{x}. They cannot 700fail; every representable real value has a representable real cube root. 701@end deftypefun 702 703@deftypefun double hypot (double @var{x}, double @var{y}) 704@deftypefunx float hypotf (float @var{x}, float @var{y}) 705@deftypefunx {long double} hypotl (long double @var{x}, long double @var{y}) 706@deftypefunx _FloatN hypotfN (_Float@var{N} @var{x}, _Float@var{N} @var{y}) 707@deftypefunx _FloatNx hypotfNx (_Float@var{N}x @var{x}, _Float@var{N}x @var{y}) 708@standards{ISO, math.h} 709@standardsx{hypotfN, TS 18661-3:2015, math.h} 710@standardsx{hypotfNx, TS 18661-3:2015, math.h} 711@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 712These functions return @code{sqrt (@var{x}*@var{x} + 713@var{y}*@var{y})}. This is the length of the hypotenuse of a right 714triangle with sides of length @var{x} and @var{y}, or the distance 715of the point (@var{x}, @var{y}) from the origin. Using this function 716instead of the direct formula is wise, since the error is 717much smaller. See also the function @code{cabs} in @ref{Absolute Value}. 718@end deftypefun 719 720@deftypefun double expm1 (double @var{x}) 721@deftypefunx float expm1f (float @var{x}) 722@deftypefunx {long double} expm1l (long double @var{x}) 723@deftypefunx _FloatN expm1fN (_Float@var{N} @var{x}) 724@deftypefunx _FloatNx expm1fNx (_Float@var{N}x @var{x}) 725@standards{ISO, math.h} 726@standardsx{expm1fN, TS 18661-3:2015, math.h} 727@standardsx{expm1fNx, TS 18661-3:2015, math.h} 728@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 729These functions return a value equivalent to @code{exp (@var{x}) - 1}. 730They are computed in a way that is accurate even if @var{x} is 731near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing 732to subtraction of two numbers that are nearly equal. 733@end deftypefun 734 735@deftypefun double log1p (double @var{x}) 736@deftypefunx float log1pf (float @var{x}) 737@deftypefunx {long double} log1pl (long double @var{x}) 738@deftypefunx _FloatN log1pfN (_Float@var{N} @var{x}) 739@deftypefunx _FloatNx log1pfNx (_Float@var{N}x @var{x}) 740@standards{ISO, math.h} 741@standardsx{log1pfN, TS 18661-3:2015, math.h} 742@standardsx{log1pfNx, TS 18661-3:2015, math.h} 743@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 744These functions return a value equivalent to @w{@code{log (1 + @var{x})}}. 745They are computed in a way that is accurate even if @var{x} is 746near zero. 747@end deftypefun 748 749@cindex complex exponentiation functions 750@cindex complex logarithm functions 751 752@w{ISO C99} defines complex variants of some of the exponentiation and 753logarithm functions. 754 755@deftypefun {complex double} cexp (complex double @var{z}) 756@deftypefunx {complex float} cexpf (complex float @var{z}) 757@deftypefunx {complex long double} cexpl (complex long double @var{z}) 758@deftypefunx {complex _FloatN} cexpfN (complex _Float@var{N} @var{z}) 759@deftypefunx {complex _FloatNx} cexpfNx (complex _Float@var{N}x @var{z}) 760@standards{ISO, complex.h} 761@standardsx{cexpfN, TS 18661-3:2015, complex.h} 762@standardsx{cexpfNx, TS 18661-3:2015, complex.h} 763@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 764These functions return @code{e} (the base of natural 765logarithms) raised to the power of @var{z}. 766Mathematically, this corresponds to the value 767 768@ifnottex 769@math{exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))} 770@end ifnottex 771@tex 772$$\exp(z) = e^z = e^{{\rm Re}\,z} (\cos ({\rm Im}\,z) + i \sin ({\rm Im}\,z))$$ 773@end tex 774@end deftypefun 775 776@deftypefun {complex double} clog (complex double @var{z}) 777@deftypefunx {complex float} clogf (complex float @var{z}) 778@deftypefunx {complex long double} clogl (complex long double @var{z}) 779@deftypefunx {complex _FloatN} clogfN (complex _Float@var{N} @var{z}) 780@deftypefunx {complex _FloatNx} clogfNx (complex _Float@var{N}x @var{z}) 781@standards{ISO, complex.h} 782@standardsx{clogfN, TS 18661-3:2015, complex.h} 783@standardsx{clogfNx, TS 18661-3:2015, complex.h} 784@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 785These functions return the natural logarithm of @var{z}. 786Mathematically, this corresponds to the value 787 788@ifnottex 789@math{log (z) = log (cabs (z)) + I * carg (z)} 790@end ifnottex 791@tex 792$$\log(z) = \log |z| + i \arg z$$ 793@end tex 794 795@noindent 796@code{clog} has a pole at 0, and will signal overflow if @var{z} equals 797or is very close to 0. It is well-defined for all other values of 798@var{z}. 799@end deftypefun 800 801 802@deftypefun {complex double} clog10 (complex double @var{z}) 803@deftypefunx {complex float} clog10f (complex float @var{z}) 804@deftypefunx {complex long double} clog10l (complex long double @var{z}) 805@deftypefunx {complex _FloatN} clog10fN (complex _Float@var{N} @var{z}) 806@deftypefunx {complex _FloatNx} clog10fNx (complex _Float@var{N}x @var{z}) 807@standards{GNU, complex.h} 808@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 809These functions return the base 10 logarithm of the complex value 810@var{z}. Mathematically, this corresponds to the value 811 812@ifnottex 813@math{log10 (z) = log10 (cabs (z)) + I * carg (z) / log (10)} 814@end ifnottex 815@tex 816$$\log_{10}(z) = \log_{10}|z| + i \arg z / \log (10)$$ 817@end tex 818 819All these functions, including the @code{_Float@var{N}} and 820@code{_Float@var{N}x} variants, are GNU extensions. 821@end deftypefun 822 823@deftypefun {complex double} csqrt (complex double @var{z}) 824@deftypefunx {complex float} csqrtf (complex float @var{z}) 825@deftypefunx {complex long double} csqrtl (complex long double @var{z}) 826@deftypefunx {complex _FloatN} csqrtfN (_Float@var{N} @var{z}) 827@deftypefunx {complex _FloatNx} csqrtfNx (complex _Float@var{N}x @var{z}) 828@standards{ISO, complex.h} 829@standardsx{csqrtfN, TS 18661-3:2015, complex.h} 830@standardsx{csqrtfNx, TS 18661-3:2015, complex.h} 831@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 832These functions return the complex square root of the argument @var{z}. Unlike 833the real-valued functions, they are defined for all values of @var{z}. 834@end deftypefun 835 836@deftypefun {complex double} cpow (complex double @var{base}, complex double @var{power}) 837@deftypefunx {complex float} cpowf (complex float @var{base}, complex float @var{power}) 838@deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power}) 839@deftypefunx {complex _FloatN} cpowfN (complex _Float@var{N} @var{base}, complex _Float@var{N} @var{power}) 840@deftypefunx {complex _FloatNx} cpowfNx (complex _Float@var{N}x @var{base}, complex _Float@var{N}x @var{power}) 841@standards{ISO, complex.h} 842@standardsx{cpowfN, TS 18661-3:2015, complex.h} 843@standardsx{cpowfNx, TS 18661-3:2015, complex.h} 844@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 845These functions return @var{base} raised to the power of 846@var{power}. This is equivalent to @w{@code{cexp (y * clog (x))}} 847@end deftypefun 848 849@node Hyperbolic Functions 850@section Hyperbolic Functions 851@cindex hyperbolic functions 852 853The functions in this section are related to the exponential functions; 854see @ref{Exponents and Logarithms}. 855 856@deftypefun double sinh (double @var{x}) 857@deftypefunx float sinhf (float @var{x}) 858@deftypefunx {long double} sinhl (long double @var{x}) 859@deftypefunx _FloatN sinhfN (_Float@var{N} @var{x}) 860@deftypefunx _FloatNx sinhfNx (_Float@var{N}x @var{x}) 861@standards{ISO, math.h} 862@standardsx{sinhfN, TS 18661-3:2015, math.h} 863@standardsx{sinhfNx, TS 18661-3:2015, math.h} 864@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 865These functions return the hyperbolic sine of @var{x}, defined 866mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}. They 867may signal overflow if @var{x} is too large. 868@end deftypefun 869 870@deftypefun double cosh (double @var{x}) 871@deftypefunx float coshf (float @var{x}) 872@deftypefunx {long double} coshl (long double @var{x}) 873@deftypefunx _FloatN coshfN (_Float@var{N} @var{x}) 874@deftypefunx _FloatNx coshfNx (_Float@var{N}x @var{x}) 875@standards{ISO, math.h} 876@standardsx{coshfN, TS 18661-3:2015, math.h} 877@standardsx{coshfNx, TS 18661-3:2015, math.h} 878@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 879These functions return the hyperbolic cosine of @var{x}, 880defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}. 881They may signal overflow if @var{x} is too large. 882@end deftypefun 883 884@deftypefun double tanh (double @var{x}) 885@deftypefunx float tanhf (float @var{x}) 886@deftypefunx {long double} tanhl (long double @var{x}) 887@deftypefunx _FloatN tanhfN (_Float@var{N} @var{x}) 888@deftypefunx _FloatNx tanhfNx (_Float@var{N}x @var{x}) 889@standards{ISO, math.h} 890@standardsx{tanhfN, TS 18661-3:2015, math.h} 891@standardsx{tanhfNx, TS 18661-3:2015, math.h} 892@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 893These functions return the hyperbolic tangent of @var{x}, 894defined mathematically as @w{@code{sinh (@var{x}) / cosh (@var{x})}}. 895They may signal overflow if @var{x} is too large. 896@end deftypefun 897 898@cindex hyperbolic functions 899 900There are counterparts for the hyperbolic functions which take 901complex arguments. 902 903@deftypefun {complex double} csinh (complex double @var{z}) 904@deftypefunx {complex float} csinhf (complex float @var{z}) 905@deftypefunx {complex long double} csinhl (complex long double @var{z}) 906@deftypefunx {complex _FloatN} csinhfN (complex _Float@var{N} @var{z}) 907@deftypefunx {complex _FloatNx} csinhfNx (complex _Float@var{N}x @var{z}) 908@standards{ISO, complex.h} 909@standardsx{csinhfN, TS 18661-3:2015, complex.h} 910@standardsx{csinhfNx, TS 18661-3:2015, complex.h} 911@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 912These functions return the complex hyperbolic sine of @var{z}, defined 913mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}. 914@end deftypefun 915 916@deftypefun {complex double} ccosh (complex double @var{z}) 917@deftypefunx {complex float} ccoshf (complex float @var{z}) 918@deftypefunx {complex long double} ccoshl (complex long double @var{z}) 919@deftypefunx {complex _FloatN} ccoshfN (complex _Float@var{N} @var{z}) 920@deftypefunx {complex _FloatNx} ccoshfNx (complex _Float@var{N}x @var{z}) 921@standards{ISO, complex.h} 922@standardsx{ccoshfN, TS 18661-3:2015, complex.h} 923@standardsx{ccoshfNx, TS 18661-3:2015, complex.h} 924@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 925These functions return the complex hyperbolic cosine of @var{z}, defined 926mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}. 927@end deftypefun 928 929@deftypefun {complex double} ctanh (complex double @var{z}) 930@deftypefunx {complex float} ctanhf (complex float @var{z}) 931@deftypefunx {complex long double} ctanhl (complex long double @var{z}) 932@deftypefunx {complex _FloatN} ctanhfN (complex _Float@var{N} @var{z}) 933@deftypefunx {complex _FloatNx} ctanhfNx (complex _Float@var{N}x @var{z}) 934@standards{ISO, complex.h} 935@standardsx{ctanhfN, TS 18661-3:2015, complex.h} 936@standardsx{ctanhfNx, TS 18661-3:2015, complex.h} 937@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 938These functions return the complex hyperbolic tangent of @var{z}, 939defined mathematically as @w{@code{csinh (@var{z}) / ccosh (@var{z})}}. 940@end deftypefun 941 942 943@cindex inverse hyperbolic functions 944 945@deftypefun double asinh (double @var{x}) 946@deftypefunx float asinhf (float @var{x}) 947@deftypefunx {long double} asinhl (long double @var{x}) 948@deftypefunx _FloatN asinhfN (_Float@var{N} @var{x}) 949@deftypefunx _FloatNx asinhfNx (_Float@var{N}x @var{x}) 950@standards{ISO, math.h} 951@standardsx{asinhfN, TS 18661-3:2015, math.h} 952@standardsx{asinhfNx, TS 18661-3:2015, math.h} 953@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 954These functions return the inverse hyperbolic sine of @var{x}---the 955value whose hyperbolic sine is @var{x}. 956@end deftypefun 957 958@deftypefun double acosh (double @var{x}) 959@deftypefunx float acoshf (float @var{x}) 960@deftypefunx {long double} acoshl (long double @var{x}) 961@deftypefunx _FloatN acoshfN (_Float@var{N} @var{x}) 962@deftypefunx _FloatNx acoshfNx (_Float@var{N}x @var{x}) 963@standards{ISO, math.h} 964@standardsx{acoshfN, TS 18661-3:2015, math.h} 965@standardsx{acoshfNx, TS 18661-3:2015, math.h} 966@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 967These functions return the inverse hyperbolic cosine of @var{x}---the 968value whose hyperbolic cosine is @var{x}. If @var{x} is less than 969@code{1}, @code{acosh} signals a domain error. 970@end deftypefun 971 972@deftypefun double atanh (double @var{x}) 973@deftypefunx float atanhf (float @var{x}) 974@deftypefunx {long double} atanhl (long double @var{x}) 975@deftypefunx _FloatN atanhfN (_Float@var{N} @var{x}) 976@deftypefunx _FloatNx atanhfNx (_Float@var{N}x @var{x}) 977@standards{ISO, math.h} 978@standardsx{atanhfN, TS 18661-3:2015, math.h} 979@standardsx{atanhfNx, TS 18661-3:2015, math.h} 980@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 981These functions return the inverse hyperbolic tangent of @var{x}---the 982value whose hyperbolic tangent is @var{x}. If the absolute value of 983@var{x} is greater than @code{1}, @code{atanh} signals a domain error; 984if it is equal to 1, @code{atanh} returns infinity. 985@end deftypefun 986 987@cindex inverse complex hyperbolic functions 988 989@deftypefun {complex double} casinh (complex double @var{z}) 990@deftypefunx {complex float} casinhf (complex float @var{z}) 991@deftypefunx {complex long double} casinhl (complex long double @var{z}) 992@deftypefunx {complex _FloatN} casinhfN (complex _Float@var{N} @var{z}) 993@deftypefunx {complex _FloatNx} casinhfNx (complex _Float@var{N}x @var{z}) 994@standards{ISO, complex.h} 995@standardsx{casinhfN, TS 18661-3:2015, complex.h} 996@standardsx{casinhfNx, TS 18661-3:2015, complex.h} 997@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 998These functions return the inverse complex hyperbolic sine of 999@var{z}---the value whose complex hyperbolic sine is @var{z}. 1000@end deftypefun 1001 1002@deftypefun {complex double} cacosh (complex double @var{z}) 1003@deftypefunx {complex float} cacoshf (complex float @var{z}) 1004@deftypefunx {complex long double} cacoshl (complex long double @var{z}) 1005@deftypefunx {complex _FloatN} cacoshfN (complex _Float@var{N} @var{z}) 1006@deftypefunx {complex _FloatNx} cacoshfNx (complex _Float@var{N}x @var{z}) 1007@standards{ISO, complex.h} 1008@standardsx{cacoshfN, TS 18661-3:2015, complex.h} 1009@standardsx{cacoshfNx, TS 18661-3:2015, complex.h} 1010@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1011These functions return the inverse complex hyperbolic cosine of 1012@var{z}---the value whose complex hyperbolic cosine is @var{z}. Unlike 1013the real-valued functions, there are no restrictions on the value of @var{z}. 1014@end deftypefun 1015 1016@deftypefun {complex double} catanh (complex double @var{z}) 1017@deftypefunx {complex float} catanhf (complex float @var{z}) 1018@deftypefunx {complex long double} catanhl (complex long double @var{z}) 1019@deftypefunx {complex _FloatN} catanhfN (complex _Float@var{N} @var{z}) 1020@deftypefunx {complex _FloatNx} catanhfNx (complex _Float@var{N}x @var{z}) 1021@standards{ISO, complex.h} 1022@standardsx{catanhfN, TS 18661-3:2015, complex.h} 1023@standardsx{catanhfNx, TS 18661-3:2015, complex.h} 1024@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1025These functions return the inverse complex hyperbolic tangent of 1026@var{z}---the value whose complex hyperbolic tangent is @var{z}. Unlike 1027the real-valued functions, there are no restrictions on the value of 1028@var{z}. 1029@end deftypefun 1030 1031@node Special Functions 1032@section Special Functions 1033@cindex special functions 1034@cindex Bessel functions 1035@cindex gamma function 1036 1037These are some more exotic mathematical functions which are sometimes 1038useful. Currently they only have real-valued versions. 1039 1040@deftypefun double erf (double @var{x}) 1041@deftypefunx float erff (float @var{x}) 1042@deftypefunx {long double} erfl (long double @var{x}) 1043@deftypefunx _FloatN erffN (_Float@var{N} @var{x}) 1044@deftypefunx _FloatNx erffNx (_Float@var{N}x @var{x}) 1045@standards{SVID, math.h} 1046@standardsx{erffN, TS 18661-3:2015, math.h} 1047@standardsx{erffNx, TS 18661-3:2015, math.h} 1048@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1049@code{erf} returns the error function of @var{x}. The error 1050function is defined as 1051@tex 1052$$\hbox{erf}(x) = {2\over\sqrt{\pi}}\cdot\int_0^x e^{-t^2} \hbox{d}t$$ 1053@end tex 1054@ifnottex 1055@smallexample 1056erf (x) = 2/sqrt(pi) * integral from 0 to x of exp(-t^2) dt 1057@end smallexample 1058@end ifnottex 1059@end deftypefun 1060 1061@deftypefun double erfc (double @var{x}) 1062@deftypefunx float erfcf (float @var{x}) 1063@deftypefunx {long double} erfcl (long double @var{x}) 1064@deftypefunx _FloatN erfcfN (_Float@var{N} @var{x}) 1065@deftypefunx _FloatNx erfcfNx (_Float@var{N}x @var{x}) 1066@standards{SVID, math.h} 1067@standardsx{erfcfN, TS 18661-3:2015, math.h} 1068@standardsx{erfcfNx, TS 18661-3:2015, math.h} 1069@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1070@code{erfc} returns @code{1.0 - erf(@var{x})}, but computed in a 1071fashion that avoids round-off error when @var{x} is large. 1072@end deftypefun 1073 1074@deftypefun double lgamma (double @var{x}) 1075@deftypefunx float lgammaf (float @var{x}) 1076@deftypefunx {long double} lgammal (long double @var{x}) 1077@deftypefunx _FloatN lgammafN (_Float@var{N} @var{x}) 1078@deftypefunx _FloatNx lgammafNx (_Float@var{N}x @var{x}) 1079@standards{SVID, math.h} 1080@standardsx{lgammafN, TS 18661-3:2015, math.h} 1081@standardsx{lgammafNx, TS 18661-3:2015, math.h} 1082@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}} 1083@code{lgamma} returns the natural logarithm of the absolute value of 1084the gamma function of @var{x}. The gamma function is defined as 1085@tex 1086$$\Gamma(x) = \int_0^\infty t^{x-1} e^{-t} \hbox{d}t$$ 1087@end tex 1088@ifnottex 1089@smallexample 1090gamma (x) = integral from 0 to @infinity{} of t^(x-1) e^-t dt 1091@end smallexample 1092@end ifnottex 1093 1094@vindex signgam 1095The sign of the gamma function is stored in the global variable 1096@var{signgam}, which is declared in @file{math.h}. It is @code{1} if 1097the intermediate result was positive or zero, or @code{-1} if it was 1098negative. 1099 1100To compute the real gamma function you can use the @code{tgamma} 1101function or you can compute the values as follows: 1102@smallexample 1103lgam = lgamma(x); 1104gam = signgam*exp(lgam); 1105@end smallexample 1106 1107The gamma function has singularities at the non-positive integers. 1108@code{lgamma} will raise the zero divide exception if evaluated at a 1109singularity. 1110@end deftypefun 1111 1112@deftypefun double lgamma_r (double @var{x}, int *@var{signp}) 1113@deftypefunx float lgammaf_r (float @var{x}, int *@var{signp}) 1114@deftypefunx {long double} lgammal_r (long double @var{x}, int *@var{signp}) 1115@deftypefunx _FloatN lgammafN_r (_Float@var{N} @var{x}, int *@var{signp}) 1116@deftypefunx _FloatNx lgammafNx_r (_Float@var{N}x @var{x}, int *@var{signp}) 1117@standards{XPG, math.h} 1118@standardsx{lgammafN_r, GNU, math.h} 1119@standardsx{lgammafNx_r, GNU, math.h} 1120@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1121@code{lgamma_r} is just like @code{lgamma}, but it stores the sign of 1122the intermediate result in the variable pointed to by @var{signp} 1123instead of in the @var{signgam} global. This means it is reentrant. 1124 1125The @code{lgammaf@var{N}_r} and @code{lgammaf@var{N}x_r} functions are 1126GNU extensions. 1127@end deftypefun 1128 1129@deftypefun double gamma (double @var{x}) 1130@deftypefunx float gammaf (float @var{x}) 1131@deftypefunx {long double} gammal (long double @var{x}) 1132@standards{SVID, math.h} 1133@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}} 1134These functions exist for compatibility reasons. They are equivalent to 1135@code{lgamma} etc. It is better to use @code{lgamma} since for one the 1136name reflects better the actual computation, and moreover @code{lgamma} is 1137standardized in @w{ISO C99} while @code{gamma} is not. 1138@end deftypefun 1139 1140@deftypefun double tgamma (double @var{x}) 1141@deftypefunx float tgammaf (float @var{x}) 1142@deftypefunx {long double} tgammal (long double @var{x}) 1143@deftypefunx _FloatN tgammafN (_Float@var{N} @var{x}) 1144@deftypefunx _FloatNx tgammafNx (_Float@var{N}x @var{x}) 1145@standardsx{tgamma, XPG, math.h} 1146@standardsx{tgamma, ISO, math.h} 1147@standardsx{tgammaf, XPG, math.h} 1148@standardsx{tgammaf, ISO, math.h} 1149@standardsx{tgammal, XPG, math.h} 1150@standardsx{tgammal, ISO, math.h} 1151@standardsx{tgammafN, TS 18661-3:2015, math.h} 1152@standardsx{tgammafNx, TS 18661-3:2015, math.h} 1153@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1154@code{tgamma} applies the gamma function to @var{x}. The gamma 1155function is defined as 1156@tex 1157$$\Gamma(x) = \int_0^\infty t^{x-1} e^{-t} \hbox{d}t$$ 1158@end tex 1159@ifnottex 1160@smallexample 1161gamma (x) = integral from 0 to @infinity{} of t^(x-1) e^-t dt 1162@end smallexample 1163@end ifnottex 1164 1165This function was introduced in @w{ISO C99}. The @code{_Float@var{N}} 1166and @code{_Float@var{N}x} variants were introduced in @w{ISO/IEC TS 116718661-3}. 1168@end deftypefun 1169 1170@deftypefun double j0 (double @var{x}) 1171@deftypefunx float j0f (float @var{x}) 1172@deftypefunx {long double} j0l (long double @var{x}) 1173@deftypefunx _FloatN j0fN (_Float@var{N} @var{x}) 1174@deftypefunx _FloatNx j0fNx (_Float@var{N}x @var{x}) 1175@standards{SVID, math.h} 1176@standardsx{j0fN, GNU, math.h} 1177@standardsx{j0fNx, GNU, math.h} 1178@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1179@code{j0} returns the Bessel function of the first kind of order 0 of 1180@var{x}. It may signal underflow if @var{x} is too large. 1181 1182The @code{_Float@var{N}} and @code{_Float@var{N}x} variants are GNU 1183extensions. 1184@end deftypefun 1185 1186@deftypefun double j1 (double @var{x}) 1187@deftypefunx float j1f (float @var{x}) 1188@deftypefunx {long double} j1l (long double @var{x}) 1189@deftypefunx _FloatN j1fN (_Float@var{N} @var{x}) 1190@deftypefunx _FloatNx j1fNx (_Float@var{N}x @var{x}) 1191@standards{SVID, math.h} 1192@standardsx{j1fN, GNU, math.h} 1193@standardsx{j1fNx, GNU, math.h} 1194@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1195@code{j1} returns the Bessel function of the first kind of order 1 of 1196@var{x}. It may signal underflow if @var{x} is too large. 1197 1198The @code{_Float@var{N}} and @code{_Float@var{N}x} variants are GNU 1199extensions. 1200@end deftypefun 1201 1202@deftypefun double jn (int @var{n}, double @var{x}) 1203@deftypefunx float jnf (int @var{n}, float @var{x}) 1204@deftypefunx {long double} jnl (int @var{n}, long double @var{x}) 1205@deftypefunx _FloatN jnfN (int @var{n}, _Float@var{N} @var{x}) 1206@deftypefunx _FloatNx jnfNx (int @var{n}, _Float@var{N}x @var{x}) 1207@standards{SVID, math.h} 1208@standardsx{jnfN, GNU, math.h} 1209@standardsx{jnfNx, GNU, math.h} 1210@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1211@code{jn} returns the Bessel function of the first kind of order 1212@var{n} of @var{x}. It may signal underflow if @var{x} is too large. 1213 1214The @code{_Float@var{N}} and @code{_Float@var{N}x} variants are GNU 1215extensions. 1216@end deftypefun 1217 1218@deftypefun double y0 (double @var{x}) 1219@deftypefunx float y0f (float @var{x}) 1220@deftypefunx {long double} y0l (long double @var{x}) 1221@deftypefunx _FloatN y0fN (_Float@var{N} @var{x}) 1222@deftypefunx _FloatNx y0fNx (_Float@var{N}x @var{x}) 1223@standards{SVID, math.h} 1224@standardsx{y0fN, GNU, math.h} 1225@standardsx{y0fNx, GNU, math.h} 1226@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1227@code{y0} returns the Bessel function of the second kind of order 0 of 1228@var{x}. It may signal underflow if @var{x} is too large. If @var{x} 1229is negative, @code{y0} signals a domain error; if it is zero, 1230@code{y0} signals overflow and returns @math{-@infinity}. 1231 1232The @code{_Float@var{N}} and @code{_Float@var{N}x} variants are GNU 1233extensions. 1234@end deftypefun 1235 1236@deftypefun double y1 (double @var{x}) 1237@deftypefunx float y1f (float @var{x}) 1238@deftypefunx {long double} y1l (long double @var{x}) 1239@deftypefunx _FloatN y1fN (_Float@var{N} @var{x}) 1240@deftypefunx _FloatNx y1fNx (_Float@var{N}x @var{x}) 1241@standards{SVID, math.h} 1242@standardsx{y1fN, GNU, math.h} 1243@standardsx{y1fNx, GNU, math.h} 1244@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1245@code{y1} returns the Bessel function of the second kind of order 1 of 1246@var{x}. It may signal underflow if @var{x} is too large. If @var{x} 1247is negative, @code{y1} signals a domain error; if it is zero, 1248@code{y1} signals overflow and returns @math{-@infinity}. 1249 1250The @code{_Float@var{N}} and @code{_Float@var{N}x} variants are GNU 1251extensions. 1252@end deftypefun 1253 1254@deftypefun double yn (int @var{n}, double @var{x}) 1255@deftypefunx float ynf (int @var{n}, float @var{x}) 1256@deftypefunx {long double} ynl (int @var{n}, long double @var{x}) 1257@deftypefunx _FloatN ynfN (int @var{n}, _Float@var{N} @var{x}) 1258@deftypefunx _FloatNx ynfNx (int @var{n}, _Float@var{N}x @var{x}) 1259@standards{SVID, math.h} 1260@standardsx{ynfN, GNU, math.h} 1261@standardsx{ynfNx, GNU, math.h} 1262@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1263@code{yn} returns the Bessel function of the second kind of order @var{n} of 1264@var{x}. It may signal underflow if @var{x} is too large. If @var{x} 1265is negative, @code{yn} signals a domain error; if it is zero, 1266@code{yn} signals overflow and returns @math{-@infinity}. 1267 1268The @code{_Float@var{N}} and @code{_Float@var{N}x} variants are GNU 1269extensions. 1270@end deftypefun 1271 1272@node Errors in Math Functions 1273@section Known Maximum Errors in Math Functions 1274@cindex math errors 1275@cindex ulps 1276 1277This section lists the known errors of the functions in the math 1278library. Errors are measured in ``units of the last place''. This is a 1279measure for the relative error. For a number @math{z} with the 1280representation @math{d.d@dots{}d@mul{}2^e} (we assume IEEE 1281floating-point numbers with base 2) the ULP is represented by 1282 1283@tex 1284$${|d.d\dots d - (z/2^e)|}\over {2^{p-1}}$$ 1285@end tex 1286@ifnottex 1287@smallexample 1288|d.d...d - (z / 2^e)| / 2^(p - 1) 1289@end smallexample 1290@end ifnottex 1291 1292@noindent 1293where @math{p} is the number of bits in the mantissa of the 1294floating-point number representation. Ideally the error for all 1295functions is always less than 0.5ulps in round-to-nearest mode. Using 1296rounding bits this is also 1297possible and normally implemented for the basic operations. Except 1298for certain functions such as @code{sqrt}, @code{fma} and @code{rint} 1299whose results are fully specified by reference to corresponding IEEE 1300754 floating-point operations, and conversions between strings and 1301floating point, @theglibc{} does not aim for correctly rounded results 1302for functions in the math library, and does not aim for correctness in 1303whether ``inexact'' exceptions are raised. Instead, the goals for 1304accuracy of functions without fully specified results are as follows; 1305some functions have bugs meaning they do not meet these goals in all 1306cases. In the future, @theglibc{} may provide some other correctly 1307rounding functions under the names such as @code{crsin} proposed for 1308an extension to ISO C. 1309 1310@itemize @bullet 1311 1312@item 1313Each function with a floating-point result behaves as if it computes 1314an infinite-precision result that is within a few ulp (in both real 1315and complex parts, for functions with complex results) of the 1316mathematically correct value of the function (interpreted together 1317with ISO C or POSIX semantics for the function in question) at the 1318exact value passed as the input. Exceptions are raised appropriately 1319for this value and in accordance with IEEE 754 / ISO C / POSIX 1320semantics, and it is then rounded according to the current rounding 1321direction to the result that is returned to the user. @code{errno} 1322may also be set (@pxref{Math Error Reporting}). (The ``inexact'' 1323exception may be raised, or not raised, even if this is inconsistent 1324with the infinite-precision value.) 1325 1326@item 1327For the IBM @code{long double} format, as used on PowerPC GNU/Linux, 1328the accuracy goal is weaker for input values not exactly representable 1329in 106 bits of precision; it is as if the input value is some value 1330within 0.5ulp of the value actually passed, where ``ulp'' is 1331interpreted in terms of a fixed-precision 106-bit mantissa, but not 1332necessarily the exact value actually passed with discontiguous 1333mantissa bits. 1334 1335@item 1336For the IBM @code{long double} format, functions whose results are 1337fully specified by reference to corresponding IEEE 754 floating-point 1338operations have the same accuracy goals as other functions, but with 1339the error bound being the same as that for division (3ulp). 1340Furthermore, ``inexact'' and ``underflow'' exceptions may be raised 1341for all functions for any inputs, even where such exceptions are 1342inconsistent with the returned value, since the underlying 1343floating-point arithmetic has that property. 1344 1345@item 1346Functions behave as if the infinite-precision result computed is zero, 1347infinity or NaN if and only if that is the mathematically correct 1348infinite-precision result. They behave as if the infinite-precision 1349result computed always has the same sign as the mathematically correct 1350result. 1351 1352@item 1353If the mathematical result is more than a few ulp above the overflow 1354threshold for the current rounding direction, the value returned is 1355the appropriate overflow value for the current rounding direction, 1356with the overflow exception raised. 1357 1358@item 1359If the mathematical result has magnitude well below half the least 1360subnormal magnitude, the returned value is either zero or the least 1361subnormal (in each case, with the correct sign), according to the 1362current rounding direction and with the underflow exception raised. 1363 1364@item 1365Where the mathematical result underflows (before rounding) and is not 1366exactly representable as a floating-point value, the function does not 1367behave as if the computed infinite-precision result is an exact value 1368in the subnormal range. This means that the underflow exception is 1369raised other than possibly for cases where the mathematical result is 1370very close to the underflow threshold and the function behaves as if 1371it computes an infinite-precision result that does not underflow. (So 1372there may be spurious underflow exceptions in cases where the 1373underflowing result is exact, but not missing underflow exceptions in 1374cases where it is inexact.) 1375 1376@item 1377@Theglibc{} does not aim for functions to satisfy other properties of 1378the underlying mathematical function, such as monotonicity, where not 1379implied by the above goals. 1380 1381@item 1382All the above applies to both real and complex parts, for complex 1383functions. 1384 1385@end itemize 1386 1387Therefore many of the functions in the math library have errors. The 1388table lists the maximum error for each function which is exposed by one 1389of the existing tests in the test suite. The table tries to cover as much 1390as possible and list the actual maximum error (or at least a ballpark 1391figure) but this is often not achieved due to the large search space. 1392 1393The table lists the ULP values for different architectures. Different 1394architectures have different results since their hardware support for 1395floating-point operations varies and also the existing hardware support 1396is different. Only the round-to-nearest rounding mode is covered by 1397this table, and vector versions of functions are not covered. 1398Functions not listed do not have known errors. 1399 1400@page 1401@c This multitable does not fit on a single page 1402@include libm-err.texi 1403 1404@node Pseudo-Random Numbers 1405@section Pseudo-Random Numbers 1406@cindex random numbers 1407@cindex pseudo-random numbers 1408@cindex seed (for random numbers) 1409 1410This section describes the GNU facilities for generating a series of 1411pseudo-random numbers. The numbers generated are not truly random; 1412typically, they form a sequence that repeats periodically, with a period 1413so large that you can ignore it for ordinary purposes. The random 1414number generator works by remembering a @dfn{seed} value which it uses 1415to compute the next random number and also to compute a new seed. 1416 1417Although the generated numbers look unpredictable within one run of a 1418program, the sequence of numbers is @emph{exactly the same} from one run 1419to the next. This is because the initial seed is always the same. This 1420is convenient when you are debugging a program, but it is unhelpful if 1421you want the program to behave unpredictably. If you want a different 1422pseudo-random series each time your program runs, you must specify a 1423different seed each time. For ordinary purposes, basing the seed on the 1424current time works well. For random numbers in cryptography, 1425@pxref{Unpredictable Bytes}. 1426 1427You can obtain repeatable sequences of numbers on a particular machine type 1428by specifying the same initial seed value for the random number 1429generator. There is no standard meaning for a particular seed value; 1430the same seed, used in different C libraries or on different CPU types, 1431will give you different random numbers. 1432 1433@Theglibc{} supports the standard @w{ISO C} random number functions 1434plus two other sets derived from BSD and SVID. The BSD and @w{ISO C} 1435functions provide identical, somewhat limited functionality. If only a 1436small number of random bits are required, we recommend you use the 1437@w{ISO C} interface, @code{rand} and @code{srand}. The SVID functions 1438provide a more flexible interface, which allows better random number 1439generator algorithms, provides more random bits (up to 48) per call, and 1440can provide random floating-point numbers. These functions are required 1441by the XPG standard and therefore will be present in all modern Unix 1442systems. 1443 1444@menu 1445* ISO Random:: @code{rand} and friends. 1446* BSD Random:: @code{random} and friends. 1447* SVID Random:: @code{drand48} and friends. 1448@end menu 1449 1450@node ISO Random 1451@subsection ISO C Random Number Functions 1452 1453This section describes the random number functions that are part of 1454the @w{ISO C} standard. 1455 1456To use these facilities, you should include the header file 1457@file{stdlib.h} in your program. 1458@pindex stdlib.h 1459 1460@deftypevr Macro int RAND_MAX 1461@standards{ISO, stdlib.h} 1462The value of this macro is an integer constant representing the largest 1463value the @code{rand} function can return. In @theglibc{}, it is 1464@code{2147483647}, which is the largest signed integer representable in 146532 bits. In other libraries, it may be as low as @code{32767}. 1466@end deftypevr 1467 1468@deftypefun int rand (void) 1469@standards{ISO, stdlib.h} 1470@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} 1471@c Just calls random. 1472The @code{rand} function returns the next pseudo-random number in the 1473series. The value ranges from @code{0} to @code{RAND_MAX}. 1474@end deftypefun 1475 1476@deftypefun void srand (unsigned int @var{seed}) 1477@standards{ISO, stdlib.h} 1478@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} 1479@c Alias to srandom. 1480This function establishes @var{seed} as the seed for a new series of 1481pseudo-random numbers. If you call @code{rand} before a seed has been 1482established with @code{srand}, it uses the value @code{1} as a default 1483seed. 1484 1485To produce a different pseudo-random series each time your program is 1486run, do @code{srand (time (0))}. 1487@end deftypefun 1488 1489POSIX.1 extended the C standard functions to support reproducible random 1490numbers in multi-threaded programs. However, the extension is badly 1491designed and unsuitable for serious work. 1492 1493@deftypefun int rand_r (unsigned int *@var{seed}) 1494@standards{POSIX.1, stdlib.h} 1495@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 1496This function returns a random number in the range 0 to @code{RAND_MAX} 1497just as @code{rand} does. However, all its state is stored in the 1498@var{seed} argument. This means the RNG's state can only have as many 1499bits as the type @code{unsigned int} has. This is far too few to 1500provide a good RNG. 1501 1502If your program requires a reentrant RNG, we recommend you use the 1503reentrant GNU extensions to the SVID random number generator. The 1504POSIX.1 interface should only be used when the GNU extensions are not 1505available. 1506@end deftypefun 1507 1508 1509@node BSD Random 1510@subsection BSD Random Number Functions 1511 1512This section describes a set of random number generation functions that 1513are derived from BSD. There is no advantage to using these functions 1514with @theglibc{}; we support them for BSD compatibility only. 1515 1516The prototypes for these functions are in @file{stdlib.h}. 1517@pindex stdlib.h 1518 1519@deftypefun {long int} random (void) 1520@standards{BSD, stdlib.h} 1521@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} 1522@c Takes a lock and calls random_r with an automatic variable and the 1523@c global state, while holding a lock. 1524This function returns the next pseudo-random number in the sequence. 1525The value returned ranges from @code{0} to @code{2147483647}. 1526 1527@strong{NB:} Temporarily this function was defined to return a 1528@code{int32_t} value to indicate that the return value always contains 152932 bits even if @code{long int} is wider. The standard demands it 1530differently. Users must always be aware of the 32-bit limitation, 1531though. 1532@end deftypefun 1533 1534@deftypefun void srandom (unsigned int @var{seed}) 1535@standards{BSD, stdlib.h} 1536@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} 1537@c Takes a lock and calls srandom_r with an automatic variable and a 1538@c static buffer. There's no MT-safety issue because the static buffer 1539@c is internally protected by a lock, although other threads may modify 1540@c the set state before it is used. 1541The @code{srandom} function sets the state of the random number 1542generator based on the integer @var{seed}. If you supply a @var{seed} value 1543of @code{1}, this will cause @code{random} to reproduce the default set 1544of random numbers. 1545 1546To produce a different set of pseudo-random numbers each time your 1547program runs, do @code{srandom (time (0))}. 1548@end deftypefun 1549 1550@deftypefun {char *} initstate (unsigned int @var{seed}, char *@var{state}, size_t @var{size}) 1551@standards{BSD, stdlib.h} 1552@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} 1553The @code{initstate} function is used to initialize the random number 1554generator state. The argument @var{state} is an array of @var{size} 1555bytes, used to hold the state information. It is initialized based on 1556@var{seed}. The size must be between 8 and 256 bytes, and should be a 1557power of two. The bigger the @var{state} array, the better. 1558 1559The return value is the previous value of the state information array. 1560You can use this value later as an argument to @code{setstate} to 1561restore that state. 1562@end deftypefun 1563 1564@deftypefun {char *} setstate (char *@var{state}) 1565@standards{BSD, stdlib.h} 1566@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} 1567The @code{setstate} function restores the random number state 1568information @var{state}. The argument must have been the result of 1569a previous call to @var{initstate} or @var{setstate}. 1570 1571The return value is the previous value of the state information array. 1572You can use this value later as an argument to @code{setstate} to 1573restore that state. 1574 1575If the function fails the return value is @code{NULL}. 1576@end deftypefun 1577 1578The four functions described so far in this section all work on a state 1579which is shared by all threads. The state is not directly accessible to 1580the user and can only be modified by these functions. This makes it 1581hard to deal with situations where each thread should have its own 1582pseudo-random number generator. 1583 1584@Theglibc{} contains four additional functions which contain the 1585state as an explicit parameter and therefore make it possible to handle 1586thread-local PRNGs. Besides this there is no difference. In fact, the 1587four functions already discussed are implemented internally using the 1588following interfaces. 1589 1590The @file{stdlib.h} header contains a definition of the following type: 1591 1592@deftp {Data Type} {struct random_data} 1593@standards{GNU, stdlib.h} 1594 1595Objects of type @code{struct random_data} contain the information 1596necessary to represent the state of the PRNG. Although a complete 1597definition of the type is present the type should be treated as opaque. 1598@end deftp 1599 1600The functions modifying the state follow exactly the already described 1601functions. 1602 1603@deftypefun int random_r (struct random_data *restrict @var{buf}, int32_t *restrict @var{result}) 1604@standards{GNU, stdlib.h} 1605@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} 1606The @code{random_r} function behaves exactly like the @code{random} 1607function except that it uses and modifies the state in the object 1608pointed to by the first parameter instead of the global state. 1609@end deftypefun 1610 1611@deftypefun int srandom_r (unsigned int @var{seed}, struct random_data *@var{buf}) 1612@standards{GNU, stdlib.h} 1613@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} 1614The @code{srandom_r} function behaves exactly like the @code{srandom} 1615function except that it uses and modifies the state in the object 1616pointed to by the second parameter instead of the global state. 1617@end deftypefun 1618 1619@deftypefun int initstate_r (unsigned int @var{seed}, char *restrict @var{statebuf}, size_t @var{statelen}, struct random_data *restrict @var{buf}) 1620@standards{GNU, stdlib.h} 1621@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} 1622The @code{initstate_r} function behaves exactly like the @code{initstate} 1623function except that it uses and modifies the state in the object 1624pointed to by the fourth parameter instead of the global state. 1625@end deftypefun 1626 1627@deftypefun int setstate_r (char *restrict @var{statebuf}, struct random_data *restrict @var{buf}) 1628@standards{GNU, stdlib.h} 1629@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} 1630The @code{setstate_r} function behaves exactly like the @code{setstate} 1631function except that it uses and modifies the state in the object 1632pointed to by the first parameter instead of the global state. 1633@end deftypefun 1634 1635@node SVID Random 1636@subsection SVID Random Number Function 1637 1638The C library on SVID systems contains yet another kind of random number 1639generator functions. They use a state of 48 bits of data. The user can 1640choose among a collection of functions which return the random bits 1641in different forms. 1642 1643Generally there are two kinds of function. The first uses a state of 1644the random number generator which is shared among several functions and 1645by all threads of the process. The second requires the user to handle 1646the state. 1647 1648All functions have in common that they use the same congruential 1649formula with the same constants. The formula is 1650 1651@smallexample 1652Y = (a * X + c) mod m 1653@end smallexample 1654 1655@noindent 1656where @var{X} is the state of the generator at the beginning and 1657@var{Y} the state at the end. @code{a} and @code{c} are constants 1658determining the way the generator works. By default they are 1659 1660@smallexample 1661a = 0x5DEECE66D = 25214903917 1662c = 0xb = 11 1663@end smallexample 1664 1665@noindent 1666but they can also be changed by the user. @code{m} is of course 2^48 1667since the state consists of a 48-bit array. 1668 1669The prototypes for these functions are in @file{stdlib.h}. 1670@pindex stdlib.h 1671 1672 1673@deftypefun double drand48 (void) 1674@standards{SVID, stdlib.h} 1675@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1676@c Uses of the static state buffer are not guarded by a lock (thus 1677@c @mtasurace:drand48), so they may be found or left at a 1678@c partially-updated state in case of calls from within signal handlers 1679@c or cancellation. None of this will break safety rules or invoke 1680@c undefined behavior, but it may affect randomness. 1681This function returns a @code{double} value in the range of @code{0.0} 1682to @code{1.0} (exclusive). The random bits are determined by the global 1683state of the random number generator in the C library. 1684 1685Since the @code{double} type according to @w{IEEE 754} has a 52-bit 1686mantissa this means 4 bits are not initialized by the random number 1687generator. These are (of course) chosen to be the least significant 1688bits and they are initialized to @code{0}. 1689@end deftypefun 1690 1691@deftypefun double erand48 (unsigned short int @var{xsubi}[3]) 1692@standards{SVID, stdlib.h} 1693@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1694@c The static buffer is just initialized with default parameters, which 1695@c are later read to advance the state held in xsubi. 1696This function returns a @code{double} value in the range of @code{0.0} 1697to @code{1.0} (exclusive), similarly to @code{drand48}. The argument is 1698an array describing the state of the random number generator. 1699 1700This function can be called subsequently since it updates the array to 1701guarantee random numbers. The array should have been initialized before 1702initial use to obtain reproducible results. 1703@end deftypefun 1704 1705@deftypefun {long int} lrand48 (void) 1706@standards{SVID, stdlib.h} 1707@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1708The @code{lrand48} function returns an integer value in the range of 1709@code{0} to @code{2^31} (exclusive). Even if the size of the @code{long 1710int} type can take more than 32 bits, no higher numbers are returned. 1711The random bits are determined by the global state of the random number 1712generator in the C library. 1713@end deftypefun 1714 1715@deftypefun {long int} nrand48 (unsigned short int @var{xsubi}[3]) 1716@standards{SVID, stdlib.h} 1717@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1718This function is similar to the @code{lrand48} function in that it 1719returns a number in the range of @code{0} to @code{2^31} (exclusive) but 1720the state of the random number generator used to produce the random bits 1721is determined by the array provided as the parameter to the function. 1722 1723The numbers in the array are updated afterwards so that subsequent calls 1724to this function yield different results (as is expected of a random 1725number generator). The array should have been initialized before the 1726first call to obtain reproducible results. 1727@end deftypefun 1728 1729@deftypefun {long int} mrand48 (void) 1730@standards{SVID, stdlib.h} 1731@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1732The @code{mrand48} function is similar to @code{lrand48}. The only 1733difference is that the numbers returned are in the range @code{-2^31} to 1734@code{2^31} (exclusive). 1735@end deftypefun 1736 1737@deftypefun {long int} jrand48 (unsigned short int @var{xsubi}[3]) 1738@standards{SVID, stdlib.h} 1739@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1740The @code{jrand48} function is similar to @code{nrand48}. The only 1741difference is that the numbers returned are in the range @code{-2^31} to 1742@code{2^31} (exclusive). For the @code{xsubi} parameter the same 1743requirements are necessary. 1744@end deftypefun 1745 1746The internal state of the random number generator can be initialized in 1747several ways. The methods differ in the completeness of the 1748information provided. 1749 1750@deftypefun void srand48 (long int @var{seedval}) 1751@standards{SVID, stdlib.h} 1752@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1753The @code{srand48} function sets the most significant 32 bits of the 1754internal state of the random number generator to the least 1755significant 32 bits of the @var{seedval} parameter. The lower 16 bits 1756are initialized to the value @code{0x330E}. Even if the @code{long 1757int} type contains more than 32 bits only the lower 32 bits are used. 1758 1759Owing to this limitation, initialization of the state of this 1760function is not very useful. But it makes it easy to use a construct 1761like @code{srand48 (time (0))}. 1762 1763A side-effect of this function is that the values @code{a} and @code{c} 1764from the internal state, which are used in the congruential formula, 1765are reset to the default values given above. This is of importance once 1766the user has called the @code{lcong48} function (see below). 1767@end deftypefun 1768 1769@deftypefun {unsigned short int *} seed48 (unsigned short int @var{seed16v}[3]) 1770@standards{SVID, stdlib.h} 1771@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1772The @code{seed48} function initializes all 48 bits of the state of the 1773internal random number generator from the contents of the parameter 1774@var{seed16v}. Here the lower 16 bits of the first element of 1775@var{seed16v} initialize the least significant 16 bits of the internal 1776state, the lower 16 bits of @code{@var{seed16v}[1]} initialize the mid-order 177716 bits of the state and the 16 lower bits of @code{@var{seed16v}[2]} 1778initialize the most significant 16 bits of the state. 1779 1780Unlike @code{srand48} this function lets the user initialize all 48 bits 1781of the state. 1782 1783The value returned by @code{seed48} is a pointer to an array containing 1784the values of the internal state before the change. This might be 1785useful to restart the random number generator at a certain state. 1786Otherwise the value can simply be ignored. 1787 1788As for @code{srand48}, the values @code{a} and @code{c} from the 1789congruential formula are reset to the default values. 1790@end deftypefun 1791 1792There is one more function to initialize the random number generator 1793which enables you to specify even more information by allowing you to 1794change the parameters in the congruential formula. 1795 1796@deftypefun void lcong48 (unsigned short int @var{param}[7]) 1797@standards{SVID, stdlib.h} 1798@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} 1799The @code{lcong48} function allows the user to change the complete state 1800of the random number generator. Unlike @code{srand48} and 1801@code{seed48}, this function also changes the constants in the 1802congruential formula. 1803 1804From the seven elements in the array @var{param} the least significant 180516 bits of the entries @code{@var{param}[0]} to @code{@var{param}[2]} 1806determine the initial state, the least significant 16 bits of 1807@code{@var{param}[3]} to @code{@var{param}[5]} determine the 48 bit 1808constant @code{a} and @code{@var{param}[6]} determines the 16-bit value 1809@code{c}. 1810@end deftypefun 1811 1812All the above functions have in common that they use the global 1813parameters for the congruential formula. In multi-threaded programs it 1814might sometimes be useful to have different parameters in different 1815threads. For this reason all the above functions have a counterpart 1816which works on a description of the random number generator in the 1817user-supplied buffer instead of the global state. 1818 1819Please note that it is no problem if several threads use the global 1820state if all threads use the functions which take a pointer to an array 1821containing the state. The random numbers are computed following the 1822same loop but if the state in the array is different all threads will 1823obtain an individual random number generator. 1824 1825The user-supplied buffer must be of type @code{struct drand48_data}. 1826This type should be regarded as opaque and not manipulated directly. 1827 1828@deftypefun int drand48_r (struct drand48_data *@var{buffer}, double *@var{result}) 1829@standards{GNU, stdlib.h} 1830@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1831This function is equivalent to the @code{drand48} function with the 1832difference that it does not modify the global random number generator 1833parameters but instead the parameters in the buffer supplied through the 1834pointer @var{buffer}. The random number is returned in the variable 1835pointed to by @var{result}. 1836 1837The return value of the function indicates whether the call succeeded. 1838If the value is less than @code{0} an error occurred and @code{errno} is 1839set to indicate the problem. 1840 1841This function is a GNU extension and should not be used in portable 1842programs. 1843@end deftypefun 1844 1845@deftypefun int erand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, double *@var{result}) 1846@standards{GNU, stdlib.h} 1847@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1848The @code{erand48_r} function works like @code{erand48}, but in addition 1849it takes an argument @var{buffer} which describes the random number 1850generator. The state of the random number generator is taken from the 1851@code{xsubi} array, the parameters for the congruential formula from the 1852global random number generator data. The random number is returned in 1853the variable pointed to by @var{result}. 1854 1855The return value is non-negative if the call succeeded. 1856 1857This function is a GNU extension and should not be used in portable 1858programs. 1859@end deftypefun 1860 1861@deftypefun int lrand48_r (struct drand48_data *@var{buffer}, long int *@var{result}) 1862@standards{GNU, stdlib.h} 1863@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1864This function is similar to @code{lrand48}, but in addition it takes a 1865pointer to a buffer describing the state of the random number generator 1866just like @code{drand48}. 1867 1868If the return value of the function is non-negative the variable pointed 1869to by @var{result} contains the result. Otherwise an error occurred. 1870 1871This function is a GNU extension and should not be used in portable 1872programs. 1873@end deftypefun 1874 1875@deftypefun int nrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result}) 1876@standards{GNU, stdlib.h} 1877@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1878The @code{nrand48_r} function works like @code{nrand48} in that it 1879produces a random number in the range @code{0} to @code{2^31}. But instead 1880of using the global parameters for the congruential formula it uses the 1881information from the buffer pointed to by @var{buffer}. The state is 1882described by the values in @var{xsubi}. 1883 1884If the return value is non-negative the variable pointed to by 1885@var{result} contains the result. 1886 1887This function is a GNU extension and should not be used in portable 1888programs. 1889@end deftypefun 1890 1891@deftypefun int mrand48_r (struct drand48_data *@var{buffer}, long int *@var{result}) 1892@standards{GNU, stdlib.h} 1893@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1894This function is similar to @code{mrand48} but like the other reentrant 1895functions it uses the random number generator described by the value in 1896the buffer pointed to by @var{buffer}. 1897 1898If the return value is non-negative the variable pointed to by 1899@var{result} contains the result. 1900 1901This function is a GNU extension and should not be used in portable 1902programs. 1903@end deftypefun 1904 1905@deftypefun int jrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result}) 1906@standards{GNU, stdlib.h} 1907@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1908The @code{jrand48_r} function is similar to @code{jrand48}. Like the 1909other reentrant functions of this function family it uses the 1910congruential formula parameters from the buffer pointed to by 1911@var{buffer}. 1912 1913If the return value is non-negative the variable pointed to by 1914@var{result} contains the result. 1915 1916This function is a GNU extension and should not be used in portable 1917programs. 1918@end deftypefun 1919 1920Before any of the above functions are used the buffer of type 1921@code{struct drand48_data} should be initialized. The easiest way to do 1922this is to fill the whole buffer with null bytes, e.g. by 1923 1924@smallexample 1925memset (buffer, '\0', sizeof (struct drand48_data)); 1926@end smallexample 1927 1928@noindent 1929Using any of the reentrant functions of this family now will 1930automatically initialize the random number generator to the default 1931values for the state and the parameters of the congruential formula. 1932 1933The other possibility is to use any of the functions which explicitly 1934initialize the buffer. Though it might be obvious how to initialize the 1935buffer from looking at the parameter to the function, it is highly 1936recommended to use these functions since the result might not always be 1937what you expect. 1938 1939@deftypefun int srand48_r (long int @var{seedval}, struct drand48_data *@var{buffer}) 1940@standards{GNU, stdlib.h} 1941@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1942The description of the random number generator represented by the 1943information in @var{buffer} is initialized similarly to what the function 1944@code{srand48} does. The state is initialized from the parameter 1945@var{seedval} and the parameters for the congruential formula are 1946initialized to their default values. 1947 1948If the return value is non-negative the function call succeeded. 1949 1950This function is a GNU extension and should not be used in portable 1951programs. 1952@end deftypefun 1953 1954@deftypefun int seed48_r (unsigned short int @var{seed16v}[3], struct drand48_data *@var{buffer}) 1955@standards{GNU, stdlib.h} 1956@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1957This function is similar to @code{srand48_r} but like @code{seed48} it 1958initializes all 48 bits of the state from the parameter @var{seed16v}. 1959 1960If the return value is non-negative the function call succeeded. It 1961does not return a pointer to the previous state of the random number 1962generator like the @code{seed48} function does. If the user wants to 1963preserve the state for a later re-run s/he can copy the whole buffer 1964pointed to by @var{buffer}. 1965 1966This function is a GNU extension and should not be used in portable 1967programs. 1968@end deftypefun 1969 1970@deftypefun int lcong48_r (unsigned short int @var{param}[7], struct drand48_data *@var{buffer}) 1971@standards{GNU, stdlib.h} 1972@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} 1973This function initializes all aspects of the random number generator 1974described in @var{buffer} with the data in @var{param}. Here it is 1975especially true that the function does more than just copying the 1976contents of @var{param} and @var{buffer}. More work is required and 1977therefore it is important to use this function rather than initializing 1978the random number generator directly. 1979 1980If the return value is non-negative the function call succeeded. 1981 1982This function is a GNU extension and should not be used in portable 1983programs. 1984@end deftypefun 1985 1986@node FP Function Optimizations 1987@section Is Fast Code or Small Code preferred? 1988@cindex Optimization 1989 1990If an application uses many floating point functions it is often the case 1991that the cost of the function calls themselves is not negligible. 1992Modern processors can often execute the operations themselves 1993very fast, but the function call disrupts the instruction pipeline. 1994 1995For this reason @theglibc{} provides optimizations for many of the 1996frequently-used math functions. When GNU CC is used and the user 1997activates the optimizer, several new inline functions and macros are 1998defined. These new functions and macros have the same names as the 1999library functions and so are used instead of the latter. In the case of 2000inline functions the compiler will decide whether it is reasonable to 2001use them, and this decision is usually correct. 2002 2003This means that no calls to the library functions may be necessary, and 2004can increase the speed of generated code significantly. The drawback is 2005that code size will increase, and the increase is not always negligible. 2006 2007There are two kinds of inline functions: those that give the same result 2008as the library functions and others that might not set @code{errno} and 2009might have a reduced precision and/or argument range in comparison with 2010the library functions. The latter inline functions are only available 2011if the flag @code{-ffast-math} is given to GNU CC. 2012 2013Not all hardware implements the entire @w{IEEE 754} standard, and even 2014if it does there may be a substantial performance penalty for using some 2015of its features. For example, enabling traps on some processors forces 2016the FPU to run un-pipelined, which can more than double calculation time. 2017@c ***Add explanation of -lieee, -mieee. 2018