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