1 @c We need some definitions here.
30 @node Mathematics, Arithmetic, Syslog, Top
31 @c %MENU% Math functions, useful constants, random numbers
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
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}.
57 * Mathematical Constants:: Precise numeric values for often-used
59 * Trig Functions:: Sine, cosine, tangent, and friends.
60 * Inverse Trig Functions:: Arcsine, arccosine, etc.
61 * Exponents and Logarithms:: Also pow and sqrt.
62 * Hyperbolic Functions:: sinh, cosh, tanh, etc.
63 * Special Functions:: Bessel, gamma, erf.
64 * Errors in Math Functions:: Known Maximum Errors in Math Functions.
65 * Pseudo-Random Numbers:: Functions for generating pseudo-random
67 * FP Function Optimizations:: Fast code or small code.
70 @node Mathematical Constants
71 @section Predefined Mathematical Constants
73 @cindex mathematical constants
75 The header @file{math.h} defines several useful mathematical constants.
76 All values are defined as preprocessor macros starting with @code{M_}.
77 The values provided are:
81 The base of natural logarithms.
83 The logarithm to base @code{2} of @code{M_E}.
85 The logarithm to base @code{10} of @code{M_E}.
87 The natural logarithm of @code{2}.
89 The natural logarithm of @code{10}.
91 Pi, the ratio of a circle's circumference to its diameter.
97 The reciprocal of pi (1/pi)
99 Two times the reciprocal of pi.
101 Two times the reciprocal of the square root of pi.
103 The square root of two.
105 The reciprocal of the square root of two (also the square root of 1/2).
108 These constants come from the Unix98 standard and were also available in
109 4.4BSD; therefore they are only defined if
110 @code{_XOPEN_SOURCE=500}, or a more general feature select macro, is
111 defined. The default set of features includes these constants.
112 @xref{Feature Test Macros}.
114 All values are of type @code{double}. As an extension, @theglibc{}
115 also defines these constants with type @code{long double}. The
116 @code{long double} macros have a lowercase @samp{l} appended to their
117 names: @code{M_El}, @code{M_PIl}, and so forth. These are only
118 available if @code{_GNU_SOURCE} is defined.
121 @emph{Note:} Some programs use a constant named @code{PI} which has the
122 same value as @code{M_PI}. This constant is not standard; it may have
123 appeared in some old AT&T headers, and is mentioned in Stroustrup's book
124 on C++. It infringes on the user's name space, so @theglibc{}
125 does not define it. Fixing programs written to expect it is simple:
126 replace @code{PI} with @code{M_PI} throughout, or put @samp{-DPI=M_PI}
127 on the compiler command line.
130 @section Trigonometric Functions
131 @cindex trigonometric functions
133 These are the familiar @code{sin}, @code{cos}, and @code{tan} functions.
134 The arguments to all of these functions are in units of radians; recall
135 that pi radians equals 180 degrees.
137 @cindex pi (trigonometric constant)
138 The math library normally defines @code{M_PI} to a @code{double}
139 approximation of pi. If strict ISO and/or POSIX compliance
140 are requested this constant is not defined, but you can easily define it
144 #define M_PI 3.14159265358979323846264338327
148 You can also compute the value of pi with the expression @code{acos
153 @deftypefun double sin (double @var{x})
156 @deftypefunx float sinf (float @var{x})
159 @deftypefunx {long double} sinl (long double @var{x})
160 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
161 These functions return the sine of @var{x}, where @var{x} is given in
162 radians. The return value is in the range @code{-1} to @code{1}.
167 @deftypefun double cos (double @var{x})
170 @deftypefunx float cosf (float @var{x})
173 @deftypefunx {long double} cosl (long double @var{x})
174 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
175 These functions return the cosine of @var{x}, where @var{x} is given in
176 radians. The return value is in the range @code{-1} to @code{1}.
181 @deftypefun double tan (double @var{x})
184 @deftypefunx float tanf (float @var{x})
187 @deftypefunx {long double} tanl (long double @var{x})
188 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
189 These functions return the tangent of @var{x}, where @var{x} is given in
192 Mathematically, the tangent function has singularities at odd multiples
193 of pi/2. If the argument @var{x} is too close to one of these
194 singularities, @code{tan} will signal overflow.
197 In many applications where @code{sin} and @code{cos} are used, the sine
198 and cosine of the same angle are needed at the same time. It is more
199 efficient to compute them simultaneously, so the library provides a
204 @deftypefun void sincos (double @var{x}, double *@var{sinx}, double *@var{cosx})
207 @deftypefunx void sincosf (float @var{x}, float *@var{sinx}, float *@var{cosx})
210 @deftypefunx void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx})
211 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
212 These functions return the sine of @var{x} in @code{*@var{sinx}} and the
213 cosine of @var{x} in @code{*@var{cosx}}, where @var{x} is given in
214 radians. Both values, @code{*@var{sinx}} and @code{*@var{cosx}}, are in
215 the range of @code{-1} to @code{1}.
217 This function is a GNU extension. Portable programs should be prepared
218 to cope with its absence.
221 @cindex complex trigonometric functions
223 @w{ISO C99} defines variants of the trig functions which work on
224 complex numbers. @Theglibc{} provides these functions, but they
225 are only useful if your compiler supports the new complex types defined
227 @c XXX Change this when gcc is fixed. -zw
228 (As of this writing GCC supports complex numbers, but there are bugs in
233 @deftypefun {complex double} csin (complex double @var{z})
236 @deftypefunx {complex float} csinf (complex float @var{z})
239 @deftypefunx {complex long double} csinl (complex long double @var{z})
240 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
241 @c There are calls to nan* that could trigger @mtslocale if they didn't get
243 These functions return the complex sine of @var{z}.
244 The mathematical definition of the complex sine is
247 @math{sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i))}.
250 $$\sin(z) = {1\over 2i} (e^{zi} - e^{-zi})$$
256 @deftypefun {complex double} ccos (complex double @var{z})
259 @deftypefunx {complex float} ccosf (complex float @var{z})
262 @deftypefunx {complex long double} ccosl (complex long double @var{z})
263 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
264 These functions return the complex cosine of @var{z}.
265 The mathematical definition of the complex cosine is
268 @math{cos (z) = 1/2 * (exp (z*i) + exp (-z*i))}
271 $$\cos(z) = {1\over 2} (e^{zi} + e^{-zi})$$
277 @deftypefun {complex double} ctan (complex double @var{z})
280 @deftypefunx {complex float} ctanf (complex float @var{z})
283 @deftypefunx {complex long double} ctanl (complex long double @var{z})
284 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
285 These functions return the complex tangent of @var{z}.
286 The mathematical definition of the complex tangent is
289 @math{tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))}
292 $$\tan(z) = -i \cdot {e^{zi} - e^{-zi}\over e^{zi} + e^{-zi}}$$
296 The complex tangent has poles at @math{pi/2 + 2n}, where @math{n} is an
297 integer. @code{ctan} may signal overflow if @var{z} is too close to a
302 @node Inverse Trig Functions
303 @section Inverse Trigonometric Functions
304 @cindex inverse trigonometric functions
306 These are the usual arcsine, arccosine and arctangent functions,
307 which are the inverses of the sine, cosine and tangent functions
312 @deftypefun double asin (double @var{x})
315 @deftypefunx float asinf (float @var{x})
318 @deftypefunx {long double} asinl (long double @var{x})
319 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
320 These functions compute the arcsine of @var{x}---that is, the value whose
321 sine is @var{x}. The value is in units of radians. Mathematically,
322 there are infinitely many such values; the one actually returned is the
323 one between @code{-pi/2} and @code{pi/2} (inclusive).
325 The arcsine function is defined mathematically only
326 over the domain @code{-1} to @code{1}. If @var{x} is outside the
327 domain, @code{asin} signals a domain error.
332 @deftypefun double acos (double @var{x})
335 @deftypefunx float acosf (float @var{x})
338 @deftypefunx {long double} acosl (long double @var{x})
339 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
340 These functions compute the arccosine of @var{x}---that is, the value
341 whose cosine is @var{x}. The value is in units of radians.
342 Mathematically, there are infinitely many such values; the one actually
343 returned is the one between @code{0} and @code{pi} (inclusive).
345 The arccosine function is defined mathematically only
346 over the domain @code{-1} to @code{1}. If @var{x} is outside the
347 domain, @code{acos} signals a domain error.
352 @deftypefun double atan (double @var{x})
355 @deftypefunx float atanf (float @var{x})
358 @deftypefunx {long double} atanl (long double @var{x})
359 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
360 These functions compute the arctangent of @var{x}---that is, the value
361 whose tangent is @var{x}. The value is in units of radians.
362 Mathematically, there are infinitely many such values; the one actually
363 returned is the one between @code{-pi/2} and @code{pi/2} (inclusive).
368 @deftypefun double atan2 (double @var{y}, double @var{x})
371 @deftypefunx float atan2f (float @var{y}, float @var{x})
374 @deftypefunx {long double} atan2l (long double @var{y}, long double @var{x})
375 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
376 This function computes the arctangent of @var{y}/@var{x}, but the signs
377 of both arguments are used to determine the quadrant of the result, and
378 @var{x} is permitted to be zero. The return value is given in radians
379 and is in the range @code{-pi} to @code{pi}, inclusive.
381 If @var{x} and @var{y} are coordinates of a point in the plane,
382 @code{atan2} returns the signed angle between the line from the origin
383 to that point and the x-axis. Thus, @code{atan2} is useful for
384 converting Cartesian coordinates to polar coordinates. (To compute the
385 radial coordinate, use @code{hypot}; see @ref{Exponents and
388 @c This is experimentally true. Should it be so? -zw
389 If both @var{x} and @var{y} are zero, @code{atan2} returns zero.
392 @cindex inverse complex trigonometric functions
393 @w{ISO C99} defines complex versions of the inverse trig functions.
397 @deftypefun {complex double} casin (complex double @var{z})
400 @deftypefunx {complex float} casinf (complex float @var{z})
403 @deftypefunx {complex long double} casinl (complex long double @var{z})
404 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
405 These functions compute the complex arcsine of @var{z}---that is, the
406 value whose sine is @var{z}. The value returned is in radians.
408 Unlike the real-valued functions, @code{casin} is defined for all
414 @deftypefun {complex double} cacos (complex double @var{z})
417 @deftypefunx {complex float} cacosf (complex float @var{z})
420 @deftypefunx {complex long double} cacosl (complex long double @var{z})
421 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
422 These functions compute the complex arccosine of @var{z}---that is, the
423 value whose cosine is @var{z}. The value returned is in radians.
425 Unlike the real-valued functions, @code{cacos} is defined for all
432 @deftypefun {complex double} catan (complex double @var{z})
435 @deftypefunx {complex float} catanf (complex float @var{z})
438 @deftypefunx {complex long double} catanl (complex long double @var{z})
439 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
440 These functions compute the complex arctangent of @var{z}---that is,
441 the value whose tangent is @var{z}. The value is in units of radians.
445 @node Exponents and Logarithms
446 @section Exponentiation and Logarithms
447 @cindex exponentiation functions
448 @cindex power functions
449 @cindex logarithm functions
453 @deftypefun double exp (double @var{x})
456 @deftypefunx float expf (float @var{x})
459 @deftypefunx {long double} expl (long double @var{x})
460 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
461 These functions compute @code{e} (the base of natural logarithms) raised
462 to the power @var{x}.
464 If the magnitude of the result is too large to be representable,
465 @code{exp} signals overflow.
470 @deftypefun double exp2 (double @var{x})
473 @deftypefunx float exp2f (float @var{x})
476 @deftypefunx {long double} exp2l (long double @var{x})
477 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
478 These functions compute @code{2} raised to the power @var{x}.
479 Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}.
484 @deftypefun double exp10 (double @var{x})
487 @deftypefunx float exp10f (float @var{x})
490 @deftypefunx {long double} exp10l (long double @var{x})
493 @deftypefunx double pow10 (double @var{x})
496 @deftypefunx float pow10f (float @var{x})
499 @deftypefunx {long double} pow10l (long double @var{x})
500 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
501 These functions compute @code{10} raised to the power @var{x}.
502 Mathematically, @code{exp10 (x)} is the same as @code{exp (x * log (10))}.
504 The @code{exp10} functions are from TS 18661-4:2015; the @code{pow10}
505 names are GNU extensions. The name @code{exp10} is
506 preferred, since it is analogous to @code{exp} and @code{exp2}.
512 @deftypefun double log (double @var{x})
515 @deftypefunx float logf (float @var{x})
518 @deftypefunx {long double} logl (long double @var{x})
519 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
520 These functions compute the natural logarithm of @var{x}. @code{exp (log
521 (@var{x}))} equals @var{x}, exactly in mathematics and approximately in
524 If @var{x} is negative, @code{log} signals a domain error. If @var{x}
525 is zero, it returns negative infinity; if @var{x} is too close to zero,
526 it may signal overflow.
531 @deftypefun double log10 (double @var{x})
534 @deftypefunx float log10f (float @var{x})
537 @deftypefunx {long double} log10l (long double @var{x})
538 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
539 These functions return the base-10 logarithm of @var{x}.
540 @code{log10 (@var{x})} equals @code{log (@var{x}) / log (10)}.
546 @deftypefun double log2 (double @var{x})
549 @deftypefunx float log2f (float @var{x})
552 @deftypefunx {long double} log2l (long double @var{x})
553 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
554 These functions return the base-2 logarithm of @var{x}.
555 @code{log2 (@var{x})} equals @code{log (@var{x}) / log (2)}.
560 @deftypefun double logb (double @var{x})
563 @deftypefunx float logbf (float @var{x})
566 @deftypefunx {long double} logbl (long double @var{x})
567 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
568 These functions extract the exponent of @var{x} and return it as a
569 floating-point value. If @code{FLT_RADIX} is two, @code{logb} is equal
570 to @code{floor (log2 (x))}, except it's probably faster.
572 If @var{x} is de-normalized, @code{logb} returns the exponent @var{x}
573 would have if it were normalized. If @var{x} is infinity (positive or
574 negative), @code{logb} returns @math{@infinity{}}. If @var{x} is zero,
575 @code{logb} returns @math{@infinity{}}. It does not signal.
580 @deftypefun int ilogb (double @var{x})
583 @deftypefunx int ilogbf (float @var{x})
586 @deftypefunx int ilogbl (long double @var{x})
589 @deftypefunx {long int} llogb (double @var{x})
592 @deftypefunx {long int} llogbf (float @var{x})
595 @deftypefunx {long int} llogbl (long double @var{x})
596 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
597 These functions are equivalent to the corresponding @code{logb}
598 functions except that they return signed integer values. The
599 @code{ilogb} functions are from ISO C99; the @code{llogb} functions
600 are from TS 18661-1:2014.
604 Since integers cannot represent infinity and NaN, @code{ilogb} instead
605 returns an integer that can't be the exponent of a normal floating-point
606 number. @file{math.h} defines constants so you can check for this.
610 @deftypevr Macro int FP_ILOGB0
611 @code{ilogb} returns this value if its argument is @code{0}. The
612 numeric value is either @code{INT_MIN} or @code{-INT_MAX}.
614 This macro is defined in @w{ISO C99}.
619 @deftypevr Macro {long int} FP_LLOGB0
620 @code{llogb} returns this value if its argument is @code{0}. The
621 numeric value is either @code{LONG_MIN} or @code{-LONG_MAX}.
623 This macro is defined in TS 18661-1:2014.
628 @deftypevr Macro int FP_ILOGBNAN
629 @code{ilogb} returns this value if its argument is @code{NaN}. The
630 numeric value is either @code{INT_MIN} or @code{INT_MAX}.
632 This macro is defined in @w{ISO C99}.
637 @deftypevr Macro {long int} FP_LLOGBNAN
638 @code{llogb} returns this value if its argument is @code{NaN}. The
639 numeric value is either @code{LONG_MIN} or @code{LONG_MAX}.
641 This macro is defined in TS 18661-1:2014.
644 These values are system specific. They might even be the same. The
645 proper way to test the result of @code{ilogb} is as follows:
649 if (i == FP_ILOGB0 || i == FP_ILOGBNAN)
653 /* @r{Handle NaN.} */
657 /* @r{Handle 0.0.} */
661 /* @r{Some other value with large exponent,}
669 @deftypefun double pow (double @var{base}, double @var{power})
672 @deftypefunx float powf (float @var{base}, float @var{power})
675 @deftypefunx {long double} powl (long double @var{base}, long double @var{power})
676 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
677 These are general exponentiation functions, returning @var{base} raised
680 Mathematically, @code{pow} would return a complex number when @var{base}
681 is negative and @var{power} is not an integral value. @code{pow} can't
682 do that, so instead it signals a domain error. @code{pow} may also
683 underflow or overflow the destination type.
686 @cindex square root function
689 @deftypefun double sqrt (double @var{x})
692 @deftypefunx float sqrtf (float @var{x})
695 @deftypefunx {long double} sqrtl (long double @var{x})
696 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
697 These functions return the nonnegative square root of @var{x}.
699 If @var{x} is negative, @code{sqrt} signals a domain error.
700 Mathematically, it should return a complex number.
703 @cindex cube root function
706 @deftypefun double cbrt (double @var{x})
709 @deftypefunx float cbrtf (float @var{x})
712 @deftypefunx {long double} cbrtl (long double @var{x})
713 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
714 These functions return the cube root of @var{x}. They cannot
715 fail; every representable real value has a representable real cube root.
720 @deftypefun double hypot (double @var{x}, double @var{y})
723 @deftypefunx float hypotf (float @var{x}, float @var{y})
726 @deftypefunx {long double} hypotl (long double @var{x}, long double @var{y})
727 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
728 These functions return @code{sqrt (@var{x}*@var{x} +
729 @var{y}*@var{y})}. This is the length of the hypotenuse of a right
730 triangle with sides of length @var{x} and @var{y}, or the distance
731 of the point (@var{x}, @var{y}) from the origin. Using this function
732 instead of the direct formula is wise, since the error is
733 much smaller. See also the function @code{cabs} in @ref{Absolute Value}.
738 @deftypefun double expm1 (double @var{x})
741 @deftypefunx float expm1f (float @var{x})
744 @deftypefunx {long double} expm1l (long double @var{x})
745 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
746 These functions return a value equivalent to @code{exp (@var{x}) - 1}.
747 They are computed in a way that is accurate even if @var{x} is
748 near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing
749 to subtraction of two numbers that are nearly equal.
754 @deftypefun double log1p (double @var{x})
757 @deftypefunx float log1pf (float @var{x})
760 @deftypefunx {long double} log1pl (long double @var{x})
761 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
762 These functions return a value equivalent to @w{@code{log (1 + @var{x})}}.
763 They are computed in a way that is accurate even if @var{x} is
767 @cindex complex exponentiation functions
768 @cindex complex logarithm functions
770 @w{ISO C99} defines complex variants of some of the exponentiation and
775 @deftypefun {complex double} cexp (complex double @var{z})
778 @deftypefunx {complex float} cexpf (complex float @var{z})
781 @deftypefunx {complex long double} cexpl (complex long double @var{z})
782 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
783 These functions return @code{e} (the base of natural
784 logarithms) raised to the power of @var{z}.
785 Mathematically, this corresponds to the value
788 @math{exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))}
791 $$\exp(z) = e^z = e^{{\rm Re}\,z} (\cos ({\rm Im}\,z) + i \sin ({\rm Im}\,z))$$
797 @deftypefun {complex double} clog (complex double @var{z})
800 @deftypefunx {complex float} clogf (complex float @var{z})
803 @deftypefunx {complex long double} clogl (complex long double @var{z})
804 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
805 These functions return the natural logarithm of @var{z}.
806 Mathematically, this corresponds to the value
809 @math{log (z) = log (cabs (z)) + I * carg (z)}
812 $$\log(z) = \log |z| + i \arg z$$
816 @code{clog} has a pole at 0, and will signal overflow if @var{z} equals
817 or is very close to 0. It is well-defined for all other values of
824 @deftypefun {complex double} clog10 (complex double @var{z})
827 @deftypefunx {complex float} clog10f (complex float @var{z})
830 @deftypefunx {complex long double} clog10l (complex long double @var{z})
831 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
832 These functions return the base 10 logarithm of the complex value
833 @var{z}. Mathematically, this corresponds to the value
836 @math{log10 (z) = log10 (cabs (z)) + I * carg (z) / log (10)}
839 $$\log_{10}(z) = \log_{10}|z| + i \arg z / \log (10)$$
842 These functions are GNU extensions.
847 @deftypefun {complex double} csqrt (complex double @var{z})
850 @deftypefunx {complex float} csqrtf (complex float @var{z})
853 @deftypefunx {complex long double} csqrtl (complex long double @var{z})
854 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
855 These functions return the complex square root of the argument @var{z}. Unlike
856 the real-valued functions, they are defined for all values of @var{z}.
861 @deftypefun {complex double} cpow (complex double @var{base}, complex double @var{power})
864 @deftypefunx {complex float} cpowf (complex float @var{base}, complex float @var{power})
867 @deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power})
868 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
869 These functions return @var{base} raised to the power of
870 @var{power}. This is equivalent to @w{@code{cexp (y * clog (x))}}
873 @node Hyperbolic Functions
874 @section Hyperbolic Functions
875 @cindex hyperbolic functions
877 The functions in this section are related to the exponential functions;
878 see @ref{Exponents and Logarithms}.
882 @deftypefun double sinh (double @var{x})
885 @deftypefunx float sinhf (float @var{x})
888 @deftypefunx {long double} sinhl (long double @var{x})
889 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
890 These functions return the hyperbolic sine of @var{x}, defined
891 mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}. They
892 may signal overflow if @var{x} is too large.
897 @deftypefun double cosh (double @var{x})
900 @deftypefunx float coshf (float @var{x})
903 @deftypefunx {long double} coshl (long double @var{x})
904 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
905 These functions return the hyperbolic cosine of @var{x},
906 defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}.
907 They may signal overflow if @var{x} is too large.
912 @deftypefun double tanh (double @var{x})
915 @deftypefunx float tanhf (float @var{x})
918 @deftypefunx {long double} tanhl (long double @var{x})
919 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
920 These functions return the hyperbolic tangent of @var{x},
921 defined mathematically as @w{@code{sinh (@var{x}) / cosh (@var{x})}}.
922 They may signal overflow if @var{x} is too large.
925 @cindex hyperbolic functions
927 There are counterparts for the hyperbolic functions which take
932 @deftypefun {complex double} csinh (complex double @var{z})
935 @deftypefunx {complex float} csinhf (complex float @var{z})
938 @deftypefunx {complex long double} csinhl (complex long double @var{z})
939 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
940 These functions return the complex hyperbolic sine of @var{z}, defined
941 mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}.
946 @deftypefun {complex double} ccosh (complex double @var{z})
949 @deftypefunx {complex float} ccoshf (complex float @var{z})
952 @deftypefunx {complex long double} ccoshl (complex long double @var{z})
953 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
954 These functions return the complex hyperbolic cosine of @var{z}, defined
955 mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}.
960 @deftypefun {complex double} ctanh (complex double @var{z})
963 @deftypefunx {complex float} ctanhf (complex float @var{z})
966 @deftypefunx {complex long double} ctanhl (complex long double @var{z})
967 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
968 These functions return the complex hyperbolic tangent of @var{z},
969 defined mathematically as @w{@code{csinh (@var{z}) / ccosh (@var{z})}}.
973 @cindex inverse hyperbolic functions
977 @deftypefun double asinh (double @var{x})
980 @deftypefunx float asinhf (float @var{x})
983 @deftypefunx {long double} asinhl (long double @var{x})
984 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
985 These functions return the inverse hyperbolic sine of @var{x}---the
986 value whose hyperbolic sine is @var{x}.
991 @deftypefun double acosh (double @var{x})
994 @deftypefunx float acoshf (float @var{x})
997 @deftypefunx {long double} acoshl (long double @var{x})
998 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
999 These functions return the inverse hyperbolic cosine of @var{x}---the
1000 value whose hyperbolic cosine is @var{x}. If @var{x} is less than
1001 @code{1}, @code{acosh} signals a domain error.
1006 @deftypefun double atanh (double @var{x})
1009 @deftypefunx float atanhf (float @var{x})
1012 @deftypefunx {long double} atanhl (long double @var{x})
1013 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1014 These functions return the inverse hyperbolic tangent of @var{x}---the
1015 value whose hyperbolic tangent is @var{x}. If the absolute value of
1016 @var{x} is greater than @code{1}, @code{atanh} signals a domain error;
1017 if it is equal to 1, @code{atanh} returns infinity.
1020 @cindex inverse complex hyperbolic functions
1024 @deftypefun {complex double} casinh (complex double @var{z})
1027 @deftypefunx {complex float} casinhf (complex float @var{z})
1030 @deftypefunx {complex long double} casinhl (complex long double @var{z})
1031 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1032 These functions return the inverse complex hyperbolic sine of
1033 @var{z}---the value whose complex hyperbolic sine is @var{z}.
1038 @deftypefun {complex double} cacosh (complex double @var{z})
1041 @deftypefunx {complex float} cacoshf (complex float @var{z})
1044 @deftypefunx {complex long double} cacoshl (complex long double @var{z})
1045 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1046 These functions return the inverse complex hyperbolic cosine of
1047 @var{z}---the value whose complex hyperbolic cosine is @var{z}. Unlike
1048 the real-valued functions, there are no restrictions on the value of @var{z}.
1053 @deftypefun {complex double} catanh (complex double @var{z})
1056 @deftypefunx {complex float} catanhf (complex float @var{z})
1059 @deftypefunx {complex long double} catanhl (complex long double @var{z})
1060 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1061 These functions return the inverse complex hyperbolic tangent of
1062 @var{z}---the value whose complex hyperbolic tangent is @var{z}. Unlike
1063 the real-valued functions, there are no restrictions on the value of
1067 @node Special Functions
1068 @section Special Functions
1069 @cindex special functions
1070 @cindex Bessel functions
1071 @cindex gamma function
1073 These are some more exotic mathematical functions which are sometimes
1074 useful. Currently they only have real-valued versions.
1078 @deftypefun double erf (double @var{x})
1081 @deftypefunx float erff (float @var{x})
1084 @deftypefunx {long double} erfl (long double @var{x})
1085 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1086 @code{erf} returns the error function of @var{x}. The error
1087 function is defined as
1089 $$\hbox{erf}(x) = {2\over\sqrt{\pi}}\cdot\int_0^x e^{-t^2} \hbox{d}t$$
1093 erf (x) = 2/sqrt(pi) * integral from 0 to x of exp(-t^2) dt
1100 @deftypefun double erfc (double @var{x})
1103 @deftypefunx float erfcf (float @var{x})
1106 @deftypefunx {long double} erfcl (long double @var{x})
1107 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1108 @code{erfc} returns @code{1.0 - erf(@var{x})}, but computed in a
1109 fashion that avoids round-off error when @var{x} is large.
1114 @deftypefun double lgamma (double @var{x})
1117 @deftypefunx float lgammaf (float @var{x})
1120 @deftypefunx {long double} lgammal (long double @var{x})
1121 @safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}}
1122 @code{lgamma} returns the natural logarithm of the absolute value of
1123 the gamma function of @var{x}. The gamma function is defined as
1125 $$\Gamma(x) = \int_0^\infty t^{x-1} e^{-t} \hbox{d}t$$
1129 gamma (x) = integral from 0 to @infinity{} of t^(x-1) e^-t dt
1134 The sign of the gamma function is stored in the global variable
1135 @var{signgam}, which is declared in @file{math.h}. It is @code{1} if
1136 the intermediate result was positive or zero, or @code{-1} if it was
1139 To compute the real gamma function you can use the @code{tgamma}
1140 function or you can compute the values as follows:
1143 gam = signgam*exp(lgam);
1146 The gamma function has singularities at the non-positive integers.
1147 @code{lgamma} will raise the zero divide exception if evaluated at a
1153 @deftypefun double lgamma_r (double @var{x}, int *@var{signp})
1156 @deftypefunx float lgammaf_r (float @var{x}, int *@var{signp})
1159 @deftypefunx {long double} lgammal_r (long double @var{x}, int *@var{signp})
1160 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1161 @code{lgamma_r} is just like @code{lgamma}, but it stores the sign of
1162 the intermediate result in the variable pointed to by @var{signp}
1163 instead of in the @var{signgam} global. This means it is reentrant.
1168 @deftypefun double gamma (double @var{x})
1171 @deftypefunx float gammaf (float @var{x})
1174 @deftypefunx {long double} gammal (long double @var{x})
1175 @safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}}
1176 These functions exist for compatibility reasons. They are equivalent to
1177 @code{lgamma} etc. It is better to use @code{lgamma} since for one the
1178 name reflects better the actual computation, and moreover @code{lgamma} is
1179 standardized in @w{ISO C99} while @code{gamma} is not.
1184 @deftypefun double tgamma (double @var{x})
1187 @deftypefunx float tgammaf (float @var{x})
1190 @deftypefunx {long double} tgammal (long double @var{x})
1191 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1192 @code{tgamma} applies the gamma function to @var{x}. The gamma
1193 function is defined as
1195 $$\Gamma(x) = \int_0^\infty t^{x-1} e^{-t} \hbox{d}t$$
1199 gamma (x) = integral from 0 to @infinity{} of t^(x-1) e^-t dt
1203 This function was introduced in @w{ISO C99}.
1208 @deftypefun double j0 (double @var{x})
1211 @deftypefunx float j0f (float @var{x})
1214 @deftypefunx {long double} j0l (long double @var{x})
1215 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1216 @code{j0} returns the Bessel function of the first kind of order 0 of
1217 @var{x}. It may signal underflow if @var{x} is too large.
1222 @deftypefun double j1 (double @var{x})
1225 @deftypefunx float j1f (float @var{x})
1228 @deftypefunx {long double} j1l (long double @var{x})
1229 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1230 @code{j1} returns the Bessel function of the first kind of order 1 of
1231 @var{x}. It may signal underflow if @var{x} is too large.
1236 @deftypefun double jn (int @var{n}, double @var{x})
1239 @deftypefunx float jnf (int @var{n}, float @var{x})
1242 @deftypefunx {long double} jnl (int @var{n}, long double @var{x})
1243 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1244 @code{jn} returns the Bessel function of the first kind of order
1245 @var{n} of @var{x}. It may signal underflow if @var{x} is too large.
1250 @deftypefun double y0 (double @var{x})
1253 @deftypefunx float y0f (float @var{x})
1256 @deftypefunx {long double} y0l (long double @var{x})
1257 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1258 @code{y0} returns the Bessel function of the second kind of order 0 of
1259 @var{x}. It may signal underflow if @var{x} is too large. If @var{x}
1260 is negative, @code{y0} signals a domain error; if it is zero,
1261 @code{y0} signals overflow and returns @math{-@infinity}.
1266 @deftypefun double y1 (double @var{x})
1269 @deftypefunx float y1f (float @var{x})
1272 @deftypefunx {long double} y1l (long double @var{x})
1273 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1274 @code{y1} returns the Bessel function of the second kind of order 1 of
1275 @var{x}. It may signal underflow if @var{x} is too large. If @var{x}
1276 is negative, @code{y1} signals a domain error; if it is zero,
1277 @code{y1} signals overflow and returns @math{-@infinity}.
1282 @deftypefun double yn (int @var{n}, double @var{x})
1285 @deftypefunx float ynf (int @var{n}, float @var{x})
1288 @deftypefunx {long double} ynl (int @var{n}, long double @var{x})
1289 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1290 @code{yn} returns the Bessel function of the second kind of order @var{n} of
1291 @var{x}. It may signal underflow if @var{x} is too large. If @var{x}
1292 is negative, @code{yn} signals a domain error; if it is zero,
1293 @code{yn} signals overflow and returns @math{-@infinity}.
1296 @node Errors in Math Functions
1297 @section Known Maximum Errors in Math Functions
1301 This section lists the known errors of the functions in the math
1302 library. Errors are measured in ``units of the last place''. This is a
1303 measure for the relative error. For a number @math{z} with the
1304 representation @math{d.d@dots{}d@mul{}2^e} (we assume IEEE
1305 floating-point numbers with base 2) the ULP is represented by
1308 $${|d.d\dots d - (z/2^e)|}\over {2^{p-1}}$$
1312 |d.d...d - (z / 2^e)| / 2^(p - 1)
1317 where @math{p} is the number of bits in the mantissa of the
1318 floating-point number representation. Ideally the error for all
1319 functions is always less than 0.5ulps in round-to-nearest mode. Using
1320 rounding bits this is also
1321 possible and normally implemented for the basic operations. Except
1322 for certain functions such as @code{sqrt}, @code{fma} and @code{rint}
1323 whose results are fully specified by reference to corresponding IEEE
1324 754 floating-point operations, and conversions between strings and
1325 floating point, @theglibc{} does not aim for correctly rounded results
1326 for functions in the math library, and does not aim for correctness in
1327 whether ``inexact'' exceptions are raised. Instead, the goals for
1328 accuracy of functions without fully specified results are as follows;
1329 some functions have bugs meaning they do not meet these goals in all
1330 cases. In the future, @theglibc{} may provide some other correctly
1331 rounding functions under the names such as @code{crsin} proposed for
1332 an extension to ISO C.
1337 Each function with a floating-point result behaves as if it computes
1338 an infinite-precision result that is within a few ulp (in both real
1339 and complex parts, for functions with complex results) of the
1340 mathematically correct value of the function (interpreted together
1341 with ISO C or POSIX semantics for the function in question) at the
1342 exact value passed as the input. Exceptions are raised appropriately
1343 for this value and in accordance with IEEE 754 / ISO C / POSIX
1344 semantics, and it is then rounded according to the current rounding
1345 direction to the result that is returned to the user. @code{errno}
1346 may also be set (@pxref{Math Error Reporting}). (The ``inexact''
1347 exception may be raised, or not raised, even if this is inconsistent
1348 with the infinite-precision value.)
1351 For the IBM @code{long double} format, as used on PowerPC GNU/Linux,
1352 the accuracy goal is weaker for input values not exactly representable
1353 in 106 bits of precision; it is as if the input value is some value
1354 within 0.5ulp of the value actually passed, where ``ulp'' is
1355 interpreted in terms of a fixed-precision 106-bit mantissa, but not
1356 necessarily the exact value actually passed with discontiguous
1360 For the IBM @code{long double} format, functions whose results are
1361 fully specified by reference to corresponding IEEE 754 floating-point
1362 operations have the same accuracy goals as other functions, but with
1363 the error bound being the same as that for division (3ulp).
1364 Furthermore, ``inexact'' and ``underflow'' exceptions may be raised
1365 for all functions for any inputs, even where such exceptions are
1366 inconsistent with the returned value, since the underlying
1367 floating-point arithmetic has that property.
1370 Functions behave as if the infinite-precision result computed is zero,
1371 infinity or NaN if and only if that is the mathematically correct
1372 infinite-precision result. They behave as if the infinite-precision
1373 result computed always has the same sign as the mathematically correct
1377 If the mathematical result is more than a few ulp above the overflow
1378 threshold for the current rounding direction, the value returned is
1379 the appropriate overflow value for the current rounding direction,
1380 with the overflow exception raised.
1383 If the mathematical result has magnitude well below half the least
1384 subnormal magnitude, the returned value is either zero or the least
1385 subnormal (in each case, with the correct sign), according to the
1386 current rounding direction and with the underflow exception raised.
1389 Where the mathematical result underflows (before rounding) and is not
1390 exactly representable as a floating-point value, the function does not
1391 behave as if the computed infinite-precision result is an exact value
1392 in the subnormal range. This means that the underflow exception is
1393 raised other than possibly for cases where the mathematical result is
1394 very close to the underflow threshold and the function behaves as if
1395 it computes an infinite-precision result that does not underflow. (So
1396 there may be spurious underflow exceptions in cases where the
1397 underflowing result is exact, but not missing underflow exceptions in
1398 cases where it is inexact.)
1401 @Theglibc{} does not aim for functions to satisfy other properties of
1402 the underlying mathematical function, such as monotonicity, where not
1403 implied by the above goals.
1406 All the above applies to both real and complex parts, for complex
1411 Therefore many of the functions in the math library have errors. The
1412 table lists the maximum error for each function which is exposed by one
1413 of the existing tests in the test suite. The table tries to cover as much
1414 as possible and list the actual maximum error (or at least a ballpark
1415 figure) but this is often not achieved due to the large search space.
1417 The table lists the ULP values for different architectures. Different
1418 architectures have different results since their hardware support for
1419 floating-point operations varies and also the existing hardware support
1423 @c This multitable does not fit on a single page
1424 @include libm-err.texi
1426 @node Pseudo-Random Numbers
1427 @section Pseudo-Random Numbers
1428 @cindex random numbers
1429 @cindex pseudo-random numbers
1430 @cindex seed (for random numbers)
1432 This section describes the GNU facilities for generating a series of
1433 pseudo-random numbers. The numbers generated are not truly random;
1434 typically, they form a sequence that repeats periodically, with a period
1435 so large that you can ignore it for ordinary purposes. The random
1436 number generator works by remembering a @dfn{seed} value which it uses
1437 to compute the next random number and also to compute a new seed.
1439 Although the generated numbers look unpredictable within one run of a
1440 program, the sequence of numbers is @emph{exactly the same} from one run
1441 to the next. This is because the initial seed is always the same. This
1442 is convenient when you are debugging a program, but it is unhelpful if
1443 you want the program to behave unpredictably. If you want a different
1444 pseudo-random series each time your program runs, you must specify a
1445 different seed each time. For ordinary purposes, basing the seed on the
1446 current time works well. For random numbers in cryptography,
1447 @pxref{Unpredictable Bytes}.
1449 You can obtain repeatable sequences of numbers on a particular machine type
1450 by specifying the same initial seed value for the random number
1451 generator. There is no standard meaning for a particular seed value;
1452 the same seed, used in different C libraries or on different CPU types,
1453 will give you different random numbers.
1455 @Theglibc{} supports the standard @w{ISO C} random number functions
1456 plus two other sets derived from BSD and SVID. The BSD and @w{ISO C}
1457 functions provide identical, somewhat limited functionality. If only a
1458 small number of random bits are required, we recommend you use the
1459 @w{ISO C} interface, @code{rand} and @code{srand}. The SVID functions
1460 provide a more flexible interface, which allows better random number
1461 generator algorithms, provides more random bits (up to 48) per call, and
1462 can provide random floating-point numbers. These functions are required
1463 by the XPG standard and therefore will be present in all modern Unix
1467 * ISO Random:: @code{rand} and friends.
1468 * BSD Random:: @code{random} and friends.
1469 * SVID Random:: @code{drand48} and friends.
1473 @subsection ISO C Random Number Functions
1475 This section describes the random number functions that are part of
1476 the @w{ISO C} standard.
1478 To use these facilities, you should include the header file
1479 @file{stdlib.h} in your program.
1484 @deftypevr Macro int RAND_MAX
1485 The value of this macro is an integer constant representing the largest
1486 value the @code{rand} function can return. In @theglibc{}, it is
1487 @code{2147483647}, which is the largest signed integer representable in
1488 32 bits. In other libraries, it may be as low as @code{32767}.
1493 @deftypefun int rand (void)
1494 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
1495 @c Just calls random.
1496 The @code{rand} function returns the next pseudo-random number in the
1497 series. The value ranges from @code{0} to @code{RAND_MAX}.
1502 @deftypefun void srand (unsigned int @var{seed})
1503 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
1504 @c Alias to srandom.
1505 This function establishes @var{seed} as the seed for a new series of
1506 pseudo-random numbers. If you call @code{rand} before a seed has been
1507 established with @code{srand}, it uses the value @code{1} as a default
1510 To produce a different pseudo-random series each time your program is
1511 run, do @code{srand (time (0))}.
1514 POSIX.1 extended the C standard functions to support reproducible random
1515 numbers in multi-threaded programs. However, the extension is badly
1516 designed and unsuitable for serious work.
1520 @deftypefun int rand_r (unsigned int *@var{seed})
1521 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1522 This function returns a random number in the range 0 to @code{RAND_MAX}
1523 just as @code{rand} does. However, all its state is stored in the
1524 @var{seed} argument. This means the RNG's state can only have as many
1525 bits as the type @code{unsigned int} has. This is far too few to
1528 If your program requires a reentrant RNG, we recommend you use the
1529 reentrant GNU extensions to the SVID random number generator. The
1530 POSIX.1 interface should only be used when the GNU extensions are not
1536 @subsection BSD Random Number Functions
1538 This section describes a set of random number generation functions that
1539 are derived from BSD. There is no advantage to using these functions
1540 with @theglibc{}; we support them for BSD compatibility only.
1542 The prototypes for these functions are in @file{stdlib.h}.
1547 @deftypefun {long int} random (void)
1548 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
1549 @c Takes a lock and calls random_r with an automatic variable and the
1550 @c global state, while holding a lock.
1551 This function returns the next pseudo-random number in the sequence.
1552 The value returned ranges from @code{0} to @code{2147483647}.
1554 @strong{NB:} Temporarily this function was defined to return a
1555 @code{int32_t} value to indicate that the return value always contains
1556 32 bits even if @code{long int} is wider. The standard demands it
1557 differently. Users must always be aware of the 32-bit limitation,
1563 @deftypefun void srandom (unsigned int @var{seed})
1564 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
1565 @c Takes a lock and calls srandom_r with an automatic variable and a
1566 @c static buffer. There's no MT-safety issue because the static buffer
1567 @c is internally protected by a lock, although other threads may modify
1568 @c the set state before it is used.
1569 The @code{srandom} function sets the state of the random number
1570 generator based on the integer @var{seed}. If you supply a @var{seed} value
1571 of @code{1}, this will cause @code{random} to reproduce the default set
1574 To produce a different set of pseudo-random numbers each time your
1575 program runs, do @code{srandom (time (0))}.
1580 @deftypefun {char *} initstate (unsigned int @var{seed}, char *@var{state}, size_t @var{size})
1581 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
1582 The @code{initstate} function is used to initialize the random number
1583 generator state. The argument @var{state} is an array of @var{size}
1584 bytes, used to hold the state information. It is initialized based on
1585 @var{seed}. The size must be between 8 and 256 bytes, and should be a
1586 power of two. The bigger the @var{state} array, the better.
1588 The return value is the previous value of the state information array.
1589 You can use this value later as an argument to @code{setstate} to
1595 @deftypefun {char *} setstate (char *@var{state})
1596 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
1597 The @code{setstate} function restores the random number state
1598 information @var{state}. The argument must have been the result of
1599 a previous call to @var{initstate} or @var{setstate}.
1601 The return value is the previous value of the state information array.
1602 You can use this value later as an argument to @code{setstate} to
1605 If the function fails the return value is @code{NULL}.
1608 The four functions described so far in this section all work on a state
1609 which is shared by all threads. The state is not directly accessible to
1610 the user and can only be modified by these functions. This makes it
1611 hard to deal with situations where each thread should have its own
1612 pseudo-random number generator.
1614 @Theglibc{} contains four additional functions which contain the
1615 state as an explicit parameter and therefore make it possible to handle
1616 thread-local PRNGs. Besides this there is no difference. In fact, the
1617 four functions already discussed are implemented internally using the
1618 following interfaces.
1620 The @file{stdlib.h} header contains a definition of the following type:
1624 @deftp {Data Type} {struct random_data}
1626 Objects of type @code{struct random_data} contain the information
1627 necessary to represent the state of the PRNG. Although a complete
1628 definition of the type is present the type should be treated as opaque.
1631 The functions modifying the state follow exactly the already described
1636 @deftypefun int random_r (struct random_data *restrict @var{buf}, int32_t *restrict @var{result})
1637 @safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
1638 The @code{random_r} function behaves exactly like the @code{random}
1639 function except that it uses and modifies the state in the object
1640 pointed to by the first parameter instead of the global state.
1645 @deftypefun int srandom_r (unsigned int @var{seed}, struct random_data *@var{buf})
1646 @safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
1647 The @code{srandom_r} function behaves exactly like the @code{srandom}
1648 function except that it uses and modifies the state in the object
1649 pointed to by the second parameter instead of the global state.
1654 @deftypefun int initstate_r (unsigned int @var{seed}, char *restrict @var{statebuf}, size_t @var{statelen}, struct random_data *restrict @var{buf})
1655 @safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
1656 The @code{initstate_r} function behaves exactly like the @code{initstate}
1657 function except that it uses and modifies the state in the object
1658 pointed to by the fourth parameter instead of the global state.
1663 @deftypefun int setstate_r (char *restrict @var{statebuf}, struct random_data *restrict @var{buf})
1664 @safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
1665 The @code{setstate_r} function behaves exactly like the @code{setstate}
1666 function except that it uses and modifies the state in the object
1667 pointed to by the first parameter instead of the global state.
1671 @subsection SVID Random Number Function
1673 The C library on SVID systems contains yet another kind of random number
1674 generator functions. They use a state of 48 bits of data. The user can
1675 choose among a collection of functions which return the random bits
1678 Generally there are two kinds of function. The first uses a state of
1679 the random number generator which is shared among several functions and
1680 by all threads of the process. The second requires the user to handle
1683 All functions have in common that they use the same congruential
1684 formula with the same constants. The formula is
1687 Y = (a * X + c) mod m
1691 where @var{X} is the state of the generator at the beginning and
1692 @var{Y} the state at the end. @code{a} and @code{c} are constants
1693 determining the way the generator works. By default they are
1696 a = 0x5DEECE66D = 25214903917
1701 but they can also be changed by the user. @code{m} is of course 2^48
1702 since the state consists of a 48-bit array.
1704 The prototypes for these functions are in @file{stdlib.h}.
1710 @deftypefun double drand48 (void)
1711 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1712 @c Uses of the static state buffer are not guarded by a lock (thus
1713 @c @mtasurace:drand48), so they may be found or left at a
1714 @c partially-updated state in case of calls from within signal handlers
1715 @c or cancellation. None of this will break safety rules or invoke
1716 @c undefined behavior, but it may affect randomness.
1717 This function returns a @code{double} value in the range of @code{0.0}
1718 to @code{1.0} (exclusive). The random bits are determined by the global
1719 state of the random number generator in the C library.
1721 Since the @code{double} type according to @w{IEEE 754} has a 52-bit
1722 mantissa this means 4 bits are not initialized by the random number
1723 generator. These are (of course) chosen to be the least significant
1724 bits and they are initialized to @code{0}.
1729 @deftypefun double erand48 (unsigned short int @var{xsubi}[3])
1730 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1731 @c The static buffer is just initialized with default parameters, which
1732 @c are later read to advance the state held in xsubi.
1733 This function returns a @code{double} value in the range of @code{0.0}
1734 to @code{1.0} (exclusive), similarly to @code{drand48}. The argument is
1735 an array describing the state of the random number generator.
1737 This function can be called subsequently since it updates the array to
1738 guarantee random numbers. The array should have been initialized before
1739 initial use to obtain reproducible results.
1744 @deftypefun {long int} lrand48 (void)
1745 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1746 The @code{lrand48} function returns an integer value in the range of
1747 @code{0} to @code{2^31} (exclusive). Even if the size of the @code{long
1748 int} type can take more than 32 bits, no higher numbers are returned.
1749 The random bits are determined by the global state of the random number
1750 generator in the C library.
1755 @deftypefun {long int} nrand48 (unsigned short int @var{xsubi}[3])
1756 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1757 This function is similar to the @code{lrand48} function in that it
1758 returns a number in the range of @code{0} to @code{2^31} (exclusive) but
1759 the state of the random number generator used to produce the random bits
1760 is determined by the array provided as the parameter to the function.
1762 The numbers in the array are updated afterwards so that subsequent calls
1763 to this function yield different results (as is expected of a random
1764 number generator). The array should have been initialized before the
1765 first call to obtain reproducible results.
1770 @deftypefun {long int} mrand48 (void)
1771 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1772 The @code{mrand48} function is similar to @code{lrand48}. The only
1773 difference is that the numbers returned are in the range @code{-2^31} to
1774 @code{2^31} (exclusive).
1779 @deftypefun {long int} jrand48 (unsigned short int @var{xsubi}[3])
1780 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1781 The @code{jrand48} function is similar to @code{nrand48}. The only
1782 difference is that the numbers returned are in the range @code{-2^31} to
1783 @code{2^31} (exclusive). For the @code{xsubi} parameter the same
1784 requirements are necessary.
1787 The internal state of the random number generator can be initialized in
1788 several ways. The methods differ in the completeness of the
1789 information provided.
1793 @deftypefun void srand48 (long int @var{seedval})
1794 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1795 The @code{srand48} function sets the most significant 32 bits of the
1796 internal state of the random number generator to the least
1797 significant 32 bits of the @var{seedval} parameter. The lower 16 bits
1798 are initialized to the value @code{0x330E}. Even if the @code{long
1799 int} type contains more than 32 bits only the lower 32 bits are used.
1801 Owing to this limitation, initialization of the state of this
1802 function is not very useful. But it makes it easy to use a construct
1803 like @code{srand48 (time (0))}.
1805 A side-effect of this function is that the values @code{a} and @code{c}
1806 from the internal state, which are used in the congruential formula,
1807 are reset to the default values given above. This is of importance once
1808 the user has called the @code{lcong48} function (see below).
1813 @deftypefun {unsigned short int *} seed48 (unsigned short int @var{seed16v}[3])
1814 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1815 The @code{seed48} function initializes all 48 bits of the state of the
1816 internal random number generator from the contents of the parameter
1817 @var{seed16v}. Here the lower 16 bits of the first element of
1818 @var{seed16v} initialize the least significant 16 bits of the internal
1819 state, the lower 16 bits of @code{@var{seed16v}[1]} initialize the mid-order
1820 16 bits of the state and the 16 lower bits of @code{@var{seed16v}[2]}
1821 initialize the most significant 16 bits of the state.
1823 Unlike @code{srand48} this function lets the user initialize all 48 bits
1826 The value returned by @code{seed48} is a pointer to an array containing
1827 the values of the internal state before the change. This might be
1828 useful to restart the random number generator at a certain state.
1829 Otherwise the value can simply be ignored.
1831 As for @code{srand48}, the values @code{a} and @code{c} from the
1832 congruential formula are reset to the default values.
1835 There is one more function to initialize the random number generator
1836 which enables you to specify even more information by allowing you to
1837 change the parameters in the congruential formula.
1841 @deftypefun void lcong48 (unsigned short int @var{param}[7])
1842 @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
1843 The @code{lcong48} function allows the user to change the complete state
1844 of the random number generator. Unlike @code{srand48} and
1845 @code{seed48}, this function also changes the constants in the
1846 congruential formula.
1848 From the seven elements in the array @var{param} the least significant
1849 16 bits of the entries @code{@var{param}[0]} to @code{@var{param}[2]}
1850 determine the initial state, the least significant 16 bits of
1851 @code{@var{param}[3]} to @code{@var{param}[5]} determine the 48 bit
1852 constant @code{a} and @code{@var{param}[6]} determines the 16-bit value
1856 All the above functions have in common that they use the global
1857 parameters for the congruential formula. In multi-threaded programs it
1858 might sometimes be useful to have different parameters in different
1859 threads. For this reason all the above functions have a counterpart
1860 which works on a description of the random number generator in the
1861 user-supplied buffer instead of the global state.
1863 Please note that it is no problem if several threads use the global
1864 state if all threads use the functions which take a pointer to an array
1865 containing the state. The random numbers are computed following the
1866 same loop but if the state in the array is different all threads will
1867 obtain an individual random number generator.
1869 The user-supplied buffer must be of type @code{struct drand48_data}.
1870 This type should be regarded as opaque and not manipulated directly.
1874 @deftypefun int drand48_r (struct drand48_data *@var{buffer}, double *@var{result})
1875 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1876 This function is equivalent to the @code{drand48} function with the
1877 difference that it does not modify the global random number generator
1878 parameters but instead the parameters in the buffer supplied through the
1879 pointer @var{buffer}. The random number is returned in the variable
1880 pointed to by @var{result}.
1882 The return value of the function indicates whether the call succeeded.
1883 If the value is less than @code{0} an error occurred and @var{errno} is
1884 set to indicate the problem.
1886 This function is a GNU extension and should not be used in portable
1892 @deftypefun int erand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, double *@var{result})
1893 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1894 The @code{erand48_r} function works like @code{erand48}, but in addition
1895 it takes an argument @var{buffer} which describes the random number
1896 generator. The state of the random number generator is taken from the
1897 @code{xsubi} array, the parameters for the congruential formula from the
1898 global random number generator data. The random number is returned in
1899 the variable pointed to by @var{result}.
1901 The return value is non-negative if the call succeeded.
1903 This function is a GNU extension and should not be used in portable
1909 @deftypefun int lrand48_r (struct drand48_data *@var{buffer}, long int *@var{result})
1910 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1911 This function is similar to @code{lrand48}, but in addition it takes a
1912 pointer to a buffer describing the state of the random number generator
1913 just like @code{drand48}.
1915 If the return value of the function is non-negative the variable pointed
1916 to by @var{result} contains the result. Otherwise an error occurred.
1918 This function is a GNU extension and should not be used in portable
1924 @deftypefun int nrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result})
1925 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1926 The @code{nrand48_r} function works like @code{nrand48} in that it
1927 produces a random number in the range @code{0} to @code{2^31}. But instead
1928 of using the global parameters for the congruential formula it uses the
1929 information from the buffer pointed to by @var{buffer}. The state is
1930 described by the values in @var{xsubi}.
1932 If the return value is non-negative the variable pointed to by
1933 @var{result} contains the result.
1935 This function is a GNU extension and should not be used in portable
1941 @deftypefun int mrand48_r (struct drand48_data *@var{buffer}, long int *@var{result})
1942 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1943 This function is similar to @code{mrand48} but like the other reentrant
1944 functions it uses the random number generator described by the value in
1945 the buffer pointed to by @var{buffer}.
1947 If the return value is non-negative the variable pointed to by
1948 @var{result} contains the result.
1950 This function is a GNU extension and should not be used in portable
1956 @deftypefun int jrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result})
1957 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1958 The @code{jrand48_r} function is similar to @code{jrand48}. Like the
1959 other reentrant functions of this function family it uses the
1960 congruential formula parameters from the buffer pointed to by
1963 If the return value is non-negative the variable pointed to by
1964 @var{result} contains the result.
1966 This function is a GNU extension and should not be used in portable
1970 Before any of the above functions are used the buffer of type
1971 @code{struct drand48_data} should be initialized. The easiest way to do
1972 this is to fill the whole buffer with null bytes, e.g. by
1975 memset (buffer, '\0', sizeof (struct drand48_data));
1979 Using any of the reentrant functions of this family now will
1980 automatically initialize the random number generator to the default
1981 values for the state and the parameters of the congruential formula.
1983 The other possibility is to use any of the functions which explicitly
1984 initialize the buffer. Though it might be obvious how to initialize the
1985 buffer from looking at the parameter to the function, it is highly
1986 recommended to use these functions since the result might not always be
1991 @deftypefun int srand48_r (long int @var{seedval}, struct drand48_data *@var{buffer})
1992 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
1993 The description of the random number generator represented by the
1994 information in @var{buffer} is initialized similarly to what the function
1995 @code{srand48} does. The state is initialized from the parameter
1996 @var{seedval} and the parameters for the congruential formula are
1997 initialized to their default values.
1999 If the return value is non-negative the function call succeeded.
2001 This function is a GNU extension and should not be used in portable
2007 @deftypefun int seed48_r (unsigned short int @var{seed16v}[3], struct drand48_data *@var{buffer})
2008 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
2009 This function is similar to @code{srand48_r} but like @code{seed48} it
2010 initializes all 48 bits of the state from the parameter @var{seed16v}.
2012 If the return value is non-negative the function call succeeded. It
2013 does not return a pointer to the previous state of the random number
2014 generator like the @code{seed48} function does. If the user wants to
2015 preserve the state for a later re-run s/he can copy the whole buffer
2016 pointed to by @var{buffer}.
2018 This function is a GNU extension and should not be used in portable
2024 @deftypefun int lcong48_r (unsigned short int @var{param}[7], struct drand48_data *@var{buffer})
2025 @safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
2026 This function initializes all aspects of the random number generator
2027 described in @var{buffer} with the data in @var{param}. Here it is
2028 especially true that the function does more than just copying the
2029 contents of @var{param} and @var{buffer}. More work is required and
2030 therefore it is important to use this function rather than initializing
2031 the random number generator directly.
2033 If the return value is non-negative the function call succeeded.
2035 This function is a GNU extension and should not be used in portable
2039 @node FP Function Optimizations
2040 @section Is Fast Code or Small Code preferred?
2041 @cindex Optimization
2043 If an application uses many floating point functions it is often the case
2044 that the cost of the function calls themselves is not negligible.
2045 Modern processors can often execute the operations themselves
2046 very fast, but the function call disrupts the instruction pipeline.
2048 For this reason @theglibc{} provides optimizations for many of the
2049 frequently-used math functions. When GNU CC is used and the user
2050 activates the optimizer, several new inline functions and macros are
2051 defined. These new functions and macros have the same names as the
2052 library functions and so are used instead of the latter. In the case of
2053 inline functions the compiler will decide whether it is reasonable to
2054 use them, and this decision is usually correct.
2056 This means that no calls to the library functions may be necessary, and
2057 can increase the speed of generated code significantly. The drawback is
2058 that code size will increase, and the increase is not always negligible.
2060 There are two kinds of inline functions: those that give the same result
2061 as the library functions and others that might not set @code{errno} and
2062 might have a reduced precision and/or argument range in comparison with
2063 the library functions. The latter inline functions are only available
2064 if the flag @code{-ffast-math} is given to GNU CC.
2066 In cases where the inline functions and macros are not wanted the symbol
2067 @code{__NO_MATH_INLINES} should be defined before any system header is
2068 included. This will ensure that only library functions are used. Of
2069 course, it can be determined for each file in the project whether
2070 giving this option is preferable or not.
2072 Not all hardware implements the entire @w{IEEE 754} standard, and even
2073 if it does there may be a substantial performance penalty for using some
2074 of its features. For example, enabling traps on some processors forces
2075 the FPU to run un-pipelined, which can more than double calculation time.
2076 @c ***Add explanation of -lieee, -mieee.