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