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