| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | @c We need some definitions here. | 
|  | 2 | @ifclear mult | 
|  | 3 | @ifhtml | 
|  | 4 | @set mult · | 
|  | 5 | @set infty ∞ | 
|  | 6 | @set pie π | 
|  | 7 | @end ifhtml | 
|  | 8 | @iftex | 
|  | 9 | @set mult @cdot | 
|  | 10 | @set infty @infty | 
|  | 11 | @end iftex | 
|  | 12 | @ifclear mult | 
|  | 13 | @set mult * | 
|  | 14 | @set infty oo | 
|  | 15 | @set pie pi | 
|  | 16 | @end ifclear | 
|  | 17 | @macro mul | 
|  | 18 | @value{mult} | 
|  | 19 | @end macro | 
|  | 20 | @macro infinity | 
|  | 21 | @value{infty} | 
|  | 22 | @end macro | 
|  | 23 | @ifnottex | 
|  | 24 | @macro pi | 
|  | 25 | @value{pie} | 
|  | 26 | @end macro | 
|  | 27 | @end ifnottex | 
|  | 28 | @end ifclear | 
|  | 29 |  | 
|  | 30 | @node Mathematics, Arithmetic, Syslog, Top | 
|  | 31 | @c %MENU% Math functions, useful constants, random numbers | 
|  | 32 | @chapter Mathematics | 
|  | 33 |  | 
|  | 34 | This chapter contains information about functions for performing | 
|  | 35 | mathematical computations, such as trigonometric functions.  Most of | 
|  | 36 | these functions have prototypes declared in the header file | 
|  | 37 | @file{math.h}.  The complex-valued functions are defined in | 
|  | 38 | @file{complex.h}. | 
|  | 39 | @pindex math.h | 
|  | 40 | @pindex complex.h | 
|  | 41 |  | 
|  | 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}. | 
|  | 47 |  | 
|  | 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}. | 
|  | 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 |  | 
|  | 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: | 
|  | 78 |  | 
|  | 79 | @vtable @code | 
|  | 80 | @item M_E | 
|  | 81 | The base of natural logarithms. | 
|  | 82 | @item M_LOG2E | 
|  | 83 | The logarithm to base @code{2} of @code{M_E}. | 
|  | 84 | @item M_LOG10E | 
|  | 85 | The logarithm to base @code{10} of @code{M_E}. | 
|  | 86 | @item M_LN2 | 
|  | 87 | The natural logarithm of @code{2}. | 
|  | 88 | @item M_LN10 | 
|  | 89 | The natural logarithm of @code{10}. | 
|  | 90 | @item M_PI | 
|  | 91 | Pi, the ratio of a circle's circumference to its diameter. | 
|  | 92 | @item M_PI_2 | 
|  | 93 | Pi divided by two. | 
|  | 94 | @item M_PI_4 | 
|  | 95 | Pi divided by four. | 
|  | 96 | @item M_1_PI | 
|  | 97 | The reciprocal of pi (1/pi) | 
|  | 98 | @item M_2_PI | 
|  | 99 | Two times the reciprocal of pi. | 
|  | 100 | @item M_2_SQRTPI | 
|  | 101 | Two times the reciprocal of the square root of pi. | 
|  | 102 | @item M_SQRT2 | 
|  | 103 | The square root of two. | 
|  | 104 | @item M_SQRT1_2 | 
|  | 105 | The reciprocal of the square root of two (also the square root of 1/2). | 
|  | 106 | @end vtable | 
|  | 107 |  | 
|  | 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}. | 
|  | 113 |  | 
|  | 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. | 
|  | 119 |  | 
|  | 120 | @vindex PI | 
|  | 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. | 
|  | 128 |  | 
|  | 129 | @node Trig Functions | 
|  | 130 | @section Trigonometric Functions | 
|  | 131 | @cindex trigonometric functions | 
|  | 132 |  | 
|  | 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. | 
|  | 136 |  | 
|  | 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 | 
|  | 141 | yourself: | 
|  | 142 |  | 
|  | 143 | @smallexample | 
|  | 144 | #define M_PI 3.14159265358979323846264338327 | 
|  | 145 | @end smallexample | 
|  | 146 |  | 
|  | 147 | @noindent | 
|  | 148 | You 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{}} | 
|  | 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}. | 
|  | 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{}} | 
|  | 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}. | 
|  | 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{}} | 
|  | 189 | These functions return the tangent of @var{x}, where @var{x} is given in | 
|  | 190 | radians. | 
|  | 191 |  | 
|  | 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. | 
|  | 195 | @end deftypefun | 
|  | 196 |  | 
|  | 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 | 
|  | 200 | function 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{}} | 
|  | 212 | These functions return the sine of @var{x} in @code{*@var{sinx}} and the | 
|  | 213 | cosine of @var{x} in @code{*@var{cos}}, 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}. | 
|  | 216 |  | 
|  | 217 | This function is a GNU extension.  Portable programs should be prepared | 
|  | 218 | to 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 | 
|  | 224 | complex numbers.  @Theglibc{} provides these functions, but they | 
|  | 225 | are only useful if your compiler supports the new complex types defined | 
|  | 226 | by 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 | 
|  | 229 | the 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. | 
|  | 243 | These functions return the complex sine of @var{z}. | 
|  | 244 | The 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{}} | 
|  | 264 | These functions return the complex cosine of @var{z}. | 
|  | 265 | The 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{}} | 
|  | 285 | These functions return the complex tangent of @var{z}. | 
|  | 286 | The 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 | 
|  | 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 | 
|  | 298 | pole. | 
|  | 299 | @end deftypefun | 
|  | 300 |  | 
|  | 301 |  | 
|  | 302 | @node Inverse Trig Functions | 
|  | 303 | @section Inverse Trigonometric Functions | 
|  | 304 | @cindex inverse trigonometric functions | 
|  | 305 |  | 
|  | 306 | These are the usual arc sine, arc cosine and arc tangent functions, | 
|  | 307 | which are the inverses of the sine, cosine and tangent functions | 
|  | 308 | respectively. | 
|  | 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{}} | 
|  | 320 | These functions compute the arc sine 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). | 
|  | 324 |  | 
|  | 325 | The arc sine 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. | 
|  | 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{}} | 
|  | 340 | These functions compute the arc cosine 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). | 
|  | 344 |  | 
|  | 345 | The arc cosine 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. | 
|  | 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{}} | 
|  | 360 | These functions compute the arc tangent 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). | 
|  | 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{}} | 
|  | 376 | This function computes the arc tangent 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. | 
|  | 380 |  | 
|  | 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 | 
|  | 386 | Logarithms}.) | 
|  | 387 |  | 
|  | 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. | 
|  | 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{}} | 
|  | 405 | These functions compute the complex arc sine of @var{z}---that is, the | 
|  | 406 | value whose sine is @var{z}.  The value returned is in radians. | 
|  | 407 |  | 
|  | 408 | Unlike the real-valued functions, @code{casin} is defined for all | 
|  | 409 | values 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{}} | 
|  | 422 | These functions compute the complex arc cosine of @var{z}---that is, the | 
|  | 423 | value whose cosine is @var{z}.  The value returned is in radians. | 
|  | 424 |  | 
|  | 425 | Unlike the real-valued functions, @code{cacos} is defined for all | 
|  | 426 | values 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{}} | 
|  | 440 | These functions compute the complex arc tangent of @var{z}---that is, | 
|  | 441 | the 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{}} | 
|  | 461 | These functions compute @code{e} (the base of natural logarithms) raised | 
|  | 462 | to the power @var{x}. | 
|  | 463 |  | 
|  | 464 | If 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{}} | 
|  | 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))}. | 
|  | 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{}} | 
|  | 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))}. | 
|  | 503 |  | 
|  | 504 | These functions are GNU extensions.  The name @code{exp10} is | 
|  | 505 | preferred, 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{}} | 
|  | 519 | These functions compute the natural logarithm of @var{x}.  @code{exp (log | 
|  | 520 | (@var{x}))} equals @var{x}, exactly in mathematics and approximately in | 
|  | 521 | C. | 
|  | 522 |  | 
|  | 523 | If @var{x} is negative, @code{log} signals a domain error.  If @var{x} | 
|  | 524 | is zero, it returns negative infinity; if @var{x} is too close to zero, | 
|  | 525 | it 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{}} | 
|  | 538 | These 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{}} | 
|  | 553 | These 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{}} | 
|  | 567 | These functions extract the exponent of @var{x} and return it as a | 
|  | 568 | floating-point value.  If @code{FLT_RADIX} is two, @code{logb} is equal | 
|  | 569 | to @code{floor (log2 (x))}, except it's probably faster. | 
|  | 570 |  | 
|  | 571 | If @var{x} is de-normalized, @code{logb} returns the exponent @var{x} | 
|  | 572 | would have if it were normalized.  If @var{x} is infinity (positive or | 
|  | 573 | negative), @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{}} | 
|  | 587 | These functions are equivalent to the corresponding @code{logb} | 
|  | 588 | functions except that they return signed integer values. | 
|  | 589 | @end deftypefun | 
|  | 590 |  | 
|  | 591 | @noindent | 
|  | 592 | Since integers cannot represent infinity and NaN, @code{ilogb} instead | 
|  | 593 | returns an integer that can't be the exponent of a normal floating-point | 
|  | 594 | number.  @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 | 
|  | 600 | numeric value is either @code{INT_MIN} or @code{-INT_MAX}. | 
|  | 601 |  | 
|  | 602 | This 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 | 
|  | 609 | numeric value is either @code{INT_MIN} or @code{INT_MAX}. | 
|  | 610 |  | 
|  | 611 | This macro is defined in @w{ISO C99}. | 
|  | 612 | @end deftypevr | 
|  | 613 |  | 
|  | 614 | These values are system specific.  They might even be the same.  The | 
|  | 615 | proper way to test the result of @code{ilogb} is as follows: | 
|  | 616 |  | 
|  | 617 | @smallexample | 
|  | 618 | i = ilogb (f); | 
|  | 619 | if (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{}} | 
|  | 647 | These are general exponentiation functions, returning @var{base} raised | 
|  | 648 | to @var{power}. | 
|  | 649 |  | 
|  | 650 | Mathematically, @code{pow} would return a complex number when @var{base} | 
|  | 651 | is negative and @var{power} is not an integral value.  @code{pow} can't | 
|  | 652 | do that, so instead it signals a domain error. @code{pow} may also | 
|  | 653 | underflow 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{}} | 
|  | 667 | These functions return the nonnegative square root of @var{x}. | 
|  | 668 |  | 
|  | 669 | If @var{x} is negative, @code{sqrt} signals a domain error. | 
|  | 670 | Mathematically, 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{}} | 
|  | 684 | These functions return the cube root of @var{x}.  They cannot | 
|  | 685 | fail; 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{}} | 
|  | 698 | These functions return @code{sqrt (@var{x}*@var{x} + | 
|  | 699 | @var{y}*@var{y})}.  This is the length of the hypotenuse of a right | 
|  | 700 | triangle with sides of length @var{x} and @var{y}, or the distance | 
|  | 701 | of the point (@var{x}, @var{y}) from the origin.  Using this function | 
|  | 702 | instead of the direct formula is wise, since the error is | 
|  | 703 | much 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{}} | 
|  | 716 | These functions return a value equivalent to @code{exp (@var{x}) - 1}. | 
|  | 717 | They are computed in a way that is accurate even if @var{x} is | 
|  | 718 | near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing | 
|  | 719 | to 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{}} | 
|  | 732 | These functions returns a value equivalent to @w{@code{log (1 + @var{x})}}. | 
|  | 733 | They are computed in a way that is accurate even if @var{x} is | 
|  | 734 | near 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 | 
|  | 741 | logarithm 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{}} | 
|  | 753 | These functions return @code{e} (the base of natural | 
|  | 754 | logarithms) raised to the power of @var{z}. | 
|  | 755 | Mathematically, 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{}} | 
|  | 775 | These functions return the natural logarithm of @var{z}. | 
|  | 776 | Mathematically, 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 | 
|  | 787 | or 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{}} | 
|  | 802 | These 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 |  | 
|  | 812 | These 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{}} | 
|  | 825 | These functions return the complex square root of the argument @var{z}.  Unlike | 
|  | 826 | the 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{}} | 
|  | 839 | These 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 |  | 
|  | 847 | The functions in this section are related to the exponential functions; | 
|  | 848 | see @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{}} | 
|  | 860 | These functions return the hyperbolic sine of @var{x}, defined | 
|  | 861 | mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}.  They | 
|  | 862 | may 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{}} | 
|  | 875 | These function return the hyperbolic cosine of @var{x}, | 
|  | 876 | defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}. | 
|  | 877 | They 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{}} | 
|  | 890 | These functions return the hyperbolic tangent of @var{x}, | 
|  | 891 | defined mathematically as @w{@code{sinh (@var{x}) / cosh (@var{x})}}. | 
|  | 892 | They may signal overflow if @var{x} is too large. | 
|  | 893 | @end deftypefun | 
|  | 894 |  | 
|  | 895 | @cindex hyperbolic functions | 
|  | 896 |  | 
|  | 897 | There are counterparts for the hyperbolic functions which take | 
|  | 898 | complex 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{}} | 
|  | 910 | These functions return the complex hyperbolic sine of @var{z}, defined | 
|  | 911 | mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}. | 
|  | 912 | @end deftypefun | 
|  | 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{}} | 
|  | 924 | These functions return the complex hyperbolic cosine of @var{z}, defined | 
|  | 925 | mathematically 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{}} | 
|  | 938 | These functions return the complex hyperbolic tangent of @var{z}, | 
|  | 939 | defined 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{}} | 
|  | 955 | These functions return the inverse hyperbolic sine of @var{x}---the | 
|  | 956 | value 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{}} | 
|  | 969 | These functions return the inverse hyperbolic cosine of @var{x}---the | 
|  | 970 | value 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{}} | 
|  | 984 | These functions return the inverse hyperbolic tangent of @var{x}---the | 
|  | 985 | value 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; | 
|  | 987 | if 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{}} | 
|  | 1002 | These 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{}} | 
|  | 1016 | These functions return the inverse complex hyperbolic cosine of | 
|  | 1017 | @var{z}---the value whose complex hyperbolic cosine is @var{z}.  Unlike | 
|  | 1018 | the 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{}} | 
|  | 1031 | These functions return the inverse complex hyperbolic tangent of | 
|  | 1032 | @var{z}---the value whose complex hyperbolic tangent is @var{z}.  Unlike | 
|  | 1033 | the 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 |  | 
|  | 1043 | These are some more exotic mathematical functions which are sometimes | 
|  | 1044 | useful.  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 | 
|  | 1057 | function 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 | 
|  | 1063 | erf (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 | 
|  | 1079 | fashion 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 | 
|  | 1093 | the 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 | 
|  | 1099 | gamma (x) = integral from 0 to @infinity{} of t^(x-1) e^-t dt | 
|  | 1100 | @end smallexample | 
|  | 1101 | @end ifnottex | 
|  | 1102 |  | 
|  | 1103 | @vindex signgam | 
|  | 1104 | The 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 | 
|  | 1106 | the intermediate result was positive or zero, or @code{-1} if it was | 
|  | 1107 | negative. | 
|  | 1108 |  | 
|  | 1109 | To compute the real gamma function you can use the @code{tgamma} | 
|  | 1110 | function or you can compute the values as follows: | 
|  | 1111 | @smallexample | 
|  | 1112 | lgam = lgamma(x); | 
|  | 1113 | gam  = signgam*exp(lgam); | 
|  | 1114 | @end smallexample | 
|  | 1115 |  | 
|  | 1116 | The gamma function has singularities at the non-positive integers. | 
|  | 1117 | @code{lgamma} will raise the zero divide exception if evaluated at a | 
|  | 1118 | singularity. | 
|  | 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 | 
|  | 1132 | the intermediate result in the variable pointed to by @var{signp} | 
|  | 1133 | instead 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{}} | 
|  | 1146 | These functions exist for compatibility reasons.  They are equivalent to | 
|  | 1147 | @code{lgamma} etc.  It is better to use @code{lgamma} since for one the | 
|  | 1148 | name reflects better the actual computation, moreover @code{lgamma} is | 
|  | 1149 | standardized 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 | 
|  | 1163 | function 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 | 
|  | 1169 | gamma (x) = integral from 0 to @infinity{} of t^(x-1) e^-t dt | 
|  | 1170 | @end smallexample | 
|  | 1171 | @end ifnottex | 
|  | 1172 |  | 
|  | 1173 | This 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} | 
|  | 1230 | is 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} | 
|  | 1246 | is 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} | 
|  | 1262 | is 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 |  | 
|  | 1271 | This section lists the known errors of the functions in the math | 
|  | 1272 | library.  Errors are measured in ``units of the last place''.  This is a | 
|  | 1273 | measure for the relative error.  For a number @math{z} with the | 
|  | 1274 | representation @math{d.d@dots{}d@mul{}2^e} (we assume IEEE | 
|  | 1275 | floating-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 | 
|  | 1287 | where @math{p} is the number of bits in the mantissa of the | 
|  | 1288 | floating-point number representation.  Ideally the error for all | 
|  | 1289 | functions is always less than 0.5ulps in round-to-nearest mode.  Using | 
|  | 1290 | rounding bits this is also | 
|  | 1291 | possible and normally implemented for the basic operations.  Except | 
|  | 1292 | for certain functions such as @code{sqrt}, @code{fma} and @code{rint} | 
|  | 1293 | whose results are fully specified by reference to corresponding IEEE | 
|  | 1294 | 754 floating-point operations, and conversions between strings and | 
|  | 1295 | floating point, @theglibc{} does not aim for correctly rounded results | 
|  | 1296 | for functions in the math library, and does not aim for correctness in | 
|  | 1297 | whether ``inexact'' exceptions are raised.  Instead, the goals for | 
|  | 1298 | accuracy of functions without fully specified results are as follows; | 
|  | 1299 | some functions have bugs meaning they do not meet these goals in all | 
|  | 1300 | cases.  In future, @theglibc{} may provide some other correctly | 
|  | 1301 | rounding functions under the names such as @code{crsin} proposed for | 
|  | 1302 | an extension to ISO C. | 
|  | 1303 |  | 
|  | 1304 | @itemize @bullet | 
|  | 1305 |  | 
|  | 1306 | @item | 
|  | 1307 | Each function with a floating-point result behaves as if it computes | 
|  | 1308 | an infinite-precision result that is within a few ulp (in both real | 
|  | 1309 | and complex parts, for functions with complex results) of the | 
|  | 1310 | mathematically correct value of the function (interpreted together | 
|  | 1311 | with ISO C or POSIX semantics for the function in question) at the | 
|  | 1312 | exact value passed as the input.  Exceptions are raised appropriately | 
|  | 1313 | for this value and in accordance with IEEE 754 / ISO C / POSIX | 
|  | 1314 | semantics, and it is then rounded according to the current rounding | 
|  | 1315 | direction to the result that is returned to the user.  @code{errno} | 
|  | 1316 | may also be set (@pxref{Math Error Reporting}).  (The ``inexact'' | 
|  | 1317 | exception may be raised, or not raised, even if this is inconsistent | 
|  | 1318 | with the infinite-precision value.) | 
|  | 1319 |  | 
|  | 1320 | @item | 
|  | 1321 | For the IBM @code{long double} format, as used on PowerPC GNU/Linux, | 
|  | 1322 | the accuracy goal is weaker for input values not exactly representable | 
|  | 1323 | in 106 bits of precision; it is as if the input value is some value | 
|  | 1324 | within 0.5ulp of the value actually passed, where ``ulp'' is | 
|  | 1325 | interpreted in terms of a fixed-precision 106-bit mantissa, but not | 
|  | 1326 | necessarily the exact value actually passed with discontiguous | 
|  | 1327 | mantissa bits. | 
|  | 1328 |  | 
|  | 1329 | @item | 
|  | 1330 | Functions behave as if the infinite-precision result computed is zero, | 
|  | 1331 | infinity or NaN if and only if that is the mathematically correct | 
|  | 1332 | infinite-precision result.  They behave as if the infinite-precision | 
|  | 1333 | result computed always has the same sign as the mathematically correct | 
|  | 1334 | result. | 
|  | 1335 |  | 
|  | 1336 | @item | 
|  | 1337 | If the mathematical result is more than a few ulp above the overflow | 
|  | 1338 | threshold for the current rounding direction, the value returned is | 
|  | 1339 | the appropriate overflow value for the current rounding direction, | 
|  | 1340 | with the overflow exception raised. | 
|  | 1341 |  | 
|  | 1342 | @item | 
|  | 1343 | If the mathematical result has magnitude well below half the least | 
|  | 1344 | subnormal magnitude, the returned value is either zero or the least | 
|  | 1345 | subnormal (in each case, with the correct sign), according to the | 
|  | 1346 | current rounding direction and with the underflow exception raised. | 
|  | 1347 |  | 
|  | 1348 | @item | 
|  | 1349 | Where the mathematical result underflows (before rounding) and is not | 
|  | 1350 | exactly representable as a floating-point value, the function does not | 
|  | 1351 | behave as if the computed infinite-precision result is an exact value | 
|  | 1352 | in the subnormal range.  This means that the underflow exception is | 
|  | 1353 | raised other than possibly for cases where the mathematical result is | 
|  | 1354 | very close to the underflow threshold and the function behaves as if | 
|  | 1355 | it computes an infinite-precision result that does not underflow.  (So | 
|  | 1356 | there may be spurious underflow exceptions in cases where the | 
|  | 1357 | underflowing result is exact, but not missing underflow exceptions in | 
|  | 1358 | cases where it is inexact.) | 
|  | 1359 |  | 
|  | 1360 | @item | 
|  | 1361 | @Theglibc{} does not aim for functions to satisfy other properties of | 
|  | 1362 | the underlying mathematical function, such as monotonicity, where not | 
|  | 1363 | implied by the above goals. | 
|  | 1364 |  | 
|  | 1365 | @item | 
|  | 1366 | All the above applies to both real and complex parts, for complex | 
|  | 1367 | functions. | 
|  | 1368 |  | 
|  | 1369 | @end itemize | 
|  | 1370 |  | 
|  | 1371 | Therefore many of the functions in the math library have errors.  The | 
|  | 1372 | table lists the maximum error for each function which is exposed by one | 
|  | 1373 | of the existing tests in the test suite.  The table tries to cover as much | 
|  | 1374 | as possible and list the actual maximum error (or at least a ballpark | 
|  | 1375 | figure) but this is often not achieved due to the large search space. | 
|  | 1376 |  | 
|  | 1377 | The table lists the ULP values for different architectures.  Different | 
|  | 1378 | architectures have different results since their hardware support for | 
|  | 1379 | floating-point operations varies and also the existing hardware support | 
|  | 1380 | is 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 |  | 
|  | 1392 | This section describes the GNU facilities for generating a series of | 
|  | 1393 | pseudo-random numbers.  The numbers generated are not truly random; | 
|  | 1394 | typically, they form a sequence that repeats periodically, with a period | 
|  | 1395 | so large that you can ignore it for ordinary purposes.  The random | 
|  | 1396 | number generator works by remembering a @dfn{seed} value which it uses | 
|  | 1397 | to compute the next random number and also to compute a new seed. | 
|  | 1398 |  | 
|  | 1399 | Although the generated numbers look unpredictable within one run of a | 
|  | 1400 | program, the sequence of numbers is @emph{exactly the same} from one run | 
|  | 1401 | to the next.  This is because the initial seed is always the same.  This | 
|  | 1402 | is convenient when you are debugging a program, but it is unhelpful if | 
|  | 1403 | you want the program to behave unpredictably.  If you want a different | 
|  | 1404 | pseudo-random series each time your program runs, you must specify a | 
|  | 1405 | different seed each time.  For ordinary purposes, basing the seed on the | 
|  | 1406 | current time works well. | 
|  | 1407 |  | 
|  | 1408 | You can obtain repeatable sequences of numbers on a particular machine type | 
|  | 1409 | by specifying the same initial seed value for the random number | 
|  | 1410 | generator.  There is no standard meaning for a particular seed value; | 
|  | 1411 | the same seed, used in different C libraries or on different CPU types, | 
|  | 1412 | will give you different random numbers. | 
|  | 1413 |  | 
|  | 1414 | @Theglibc{} supports the standard @w{ISO C} random number functions | 
|  | 1415 | plus two other sets derived from BSD and SVID.  The BSD and @w{ISO C} | 
|  | 1416 | functions provide identical, somewhat limited functionality.  If only a | 
|  | 1417 | small number of random bits are required, we recommend you use the | 
|  | 1418 | @w{ISO C} interface, @code{rand} and @code{srand}.  The SVID functions | 
|  | 1419 | provide a more flexible interface, which allows better random number | 
|  | 1420 | generator algorithms, provides more random bits (up to 48) per call, and | 
|  | 1421 | can provide random floating-point numbers.  These functions are required | 
|  | 1422 | by the XPG standard and therefore will be present in all modern Unix | 
|  | 1423 | systems. | 
|  | 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 |  | 
|  | 1434 | This section describes the random number functions that are part of | 
|  | 1435 | the @w{ISO C} standard. | 
|  | 1436 |  | 
|  | 1437 | To 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 | 
|  | 1444 | The value of this macro is an integer constant representing the largest | 
|  | 1445 | value the @code{rand} function can return.  In @theglibc{}, it is | 
|  | 1446 | @code{2147483647}, which is the largest signed integer representable in | 
|  | 1447 | 32 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. | 
|  | 1455 | The @code{rand} function returns the next pseudo-random number in the | 
|  | 1456 | series.  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. | 
|  | 1464 | This function establishes @var{seed} as the seed for a new series of | 
|  | 1465 | pseudo-random numbers.  If you call @code{rand} before a seed has been | 
|  | 1466 | established with @code{srand}, it uses the value @code{1} as a default | 
|  | 1467 | seed. | 
|  | 1468 |  | 
|  | 1469 | To produce a different pseudo-random series each time your program is | 
|  | 1470 | run, do @code{srand (time (0))}. | 
|  | 1471 | @end deftypefun | 
|  | 1472 |  | 
|  | 1473 | POSIX.1 extended the C standard functions to support reproducible random | 
|  | 1474 | numbers in multi-threaded programs.  However, the extension is badly | 
|  | 1475 | designed 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{}} | 
|  | 1481 | This function returns a random number in the range 0 to @code{RAND_MAX} | 
|  | 1482 | just 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 | 
|  | 1484 | bits as the type @code{unsigned int} has.  This is far too few to | 
|  | 1485 | provide a good RNG. | 
|  | 1486 |  | 
|  | 1487 | If your program requires a reentrant RNG, we recommend you use the | 
|  | 1488 | reentrant GNU extensions to the SVID random number generator.  The | 
|  | 1489 | POSIX.1 interface should only be used when the GNU extensions are not | 
|  | 1490 | available. | 
|  | 1491 | @end deftypefun | 
|  | 1492 |  | 
|  | 1493 |  | 
|  | 1494 | @node BSD Random | 
|  | 1495 | @subsection BSD Random Number Functions | 
|  | 1496 |  | 
|  | 1497 | This section describes a set of random number generation functions that | 
|  | 1498 | are derived from BSD.  There is no advantage to using these functions | 
|  | 1499 | with @theglibc{}; we support them for BSD compatibility only. | 
|  | 1500 |  | 
|  | 1501 | The 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. | 
|  | 1510 | This function returns the next pseudo-random number in the sequence. | 
|  | 1511 | The 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 | 
|  | 1515 | 32 bits even if @code{long int} is wider.  The standard demands it | 
|  | 1516 | differently.  Users must always be aware of the 32-bit limitation, | 
|  | 1517 | though. | 
|  | 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. | 
|  | 1528 | The @code{srandom} function sets the state of the random number | 
|  | 1529 | generator based on the integer @var{seed}.  If you supply a @var{seed} value | 
|  | 1530 | of @code{1}, this will cause @code{random} to reproduce the default set | 
|  | 1531 | of random numbers. | 
|  | 1532 |  | 
|  | 1533 | To produce a different set of pseudo-random numbers each time your | 
|  | 1534 | program 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{}}} | 
|  | 1541 | The @code{initstate} function is used to initialize the random number | 
|  | 1542 | generator state.  The argument @var{state} is an array of @var{size} | 
|  | 1543 | bytes, 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 | 
|  | 1545 | power of two.  The bigger the @var{state} array, the better. | 
|  | 1546 |  | 
|  | 1547 | The return value is the previous value of the state information array. | 
|  | 1548 | You can use this value later as an argument to @code{setstate} to | 
|  | 1549 | restore 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{}}} | 
|  | 1556 | The @code{setstate} function restores the random number state | 
|  | 1557 | information @var{state}.  The argument must have been the result of | 
|  | 1558 | a previous call to @var{initstate} or @var{setstate}. | 
|  | 1559 |  | 
|  | 1560 | The return value is the previous value of the state information array. | 
|  | 1561 | You can use this value later as an argument to @code{setstate} to | 
|  | 1562 | restore that state. | 
|  | 1563 |  | 
|  | 1564 | If the function fails the return value is @code{NULL}. | 
|  | 1565 | @end deftypefun | 
|  | 1566 |  | 
|  | 1567 | The four functions described so far in this section all work on a state | 
|  | 1568 | which is shared by all threads.  The state is not directly accessible to | 
|  | 1569 | the user and can only be modified by these functions.  This makes it | 
|  | 1570 | hard to deal with situations where each thread should have its own | 
|  | 1571 | pseudo-random number generator. | 
|  | 1572 |  | 
|  | 1573 | @Theglibc{} contains four additional functions which contain the | 
|  | 1574 | state as an explicit parameter and therefore make it possible to handle | 
|  | 1575 | thread-local PRNGs.  Beside this there is no difference.  In fact, the | 
|  | 1576 | four functions already discussed are implemented internally using the | 
|  | 1577 | following interfaces. | 
|  | 1578 |  | 
|  | 1579 | The @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 |  | 
|  | 1585 | Objects of type @code{struct random_data} contain the information | 
|  | 1586 | necessary to represent the state of the PRNG.  Although a complete | 
|  | 1587 | definition of the type is present the type should be treated as opaque. | 
|  | 1588 | @end deftp | 
|  | 1589 |  | 
|  | 1590 | The functions modifying the state follow exactly the already described | 
|  | 1591 | functions. | 
|  | 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{}}} | 
|  | 1597 | The @code{random_r} function behaves exactly like the @code{random} | 
|  | 1598 | function except that it uses and modifies the state in the object | 
|  | 1599 | pointed 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{}}} | 
|  | 1606 | The @code{srandom_r} function behaves exactly like the @code{srandom} | 
|  | 1607 | function except that it uses and modifies the state in the object | 
|  | 1608 | pointed 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{}}} | 
|  | 1615 | The @code{initstate_r} function behaves exactly like the @code{initstate} | 
|  | 1616 | function except that it uses and modifies the state in the object | 
|  | 1617 | pointed 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{}}} | 
|  | 1624 | The @code{setstate_r} function behaves exactly like the @code{setstate} | 
|  | 1625 | function except that it uses and modifies the state in the object | 
|  | 1626 | pointed 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 |  | 
|  | 1632 | The C library on SVID systems contains yet another kind of random number | 
|  | 1633 | generator functions.  They use a state of 48 bits of data.  The user can | 
|  | 1634 | choose among a collection of functions which return the random bits | 
|  | 1635 | in different forms. | 
|  | 1636 |  | 
|  | 1637 | Generally there are two kinds of function.  The first uses a state of | 
|  | 1638 | the random number generator which is shared among several functions and | 
|  | 1639 | by all threads of the process.  The second requires the user to handle | 
|  | 1640 | the state. | 
|  | 1641 |  | 
|  | 1642 | All functions have in common that they use the same congruential | 
|  | 1643 | formula with the same constants.  The formula is | 
|  | 1644 |  | 
|  | 1645 | @smallexample | 
|  | 1646 | Y = (a * X + c) mod m | 
|  | 1647 | @end smallexample | 
|  | 1648 |  | 
|  | 1649 | @noindent | 
|  | 1650 | where @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 | 
|  | 1652 | determining the way the generator works.  By default they are | 
|  | 1653 |  | 
|  | 1654 | @smallexample | 
|  | 1655 | a = 0x5DEECE66D = 25214903917 | 
|  | 1656 | c = 0xb = 11 | 
|  | 1657 | @end smallexample | 
|  | 1658 |  | 
|  | 1659 | @noindent | 
|  | 1660 | but they can also be changed by the user.  @code{m} is of course 2^48 | 
|  | 1661 | since the state consists of a 48-bit array. | 
|  | 1662 |  | 
|  | 1663 | The 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. | 
|  | 1676 | This function returns a @code{double} value in the range of @code{0.0} | 
|  | 1677 | to @code{1.0} (exclusive).  The random bits are determined by the global | 
|  | 1678 | state of the random number generator in the C library. | 
|  | 1679 |  | 
|  | 1680 | Since the @code{double} type according to @w{IEEE 754} has a 52-bit | 
|  | 1681 | mantissa this means 4 bits are not initialized by the random number | 
|  | 1682 | generator.  These are (of course) chosen to be the least significant | 
|  | 1683 | bits 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. | 
|  | 1692 | This function returns a @code{double} value in the range of @code{0.0} | 
|  | 1693 | to @code{1.0} (exclusive), similarly to @code{drand48}.  The argument is | 
|  | 1694 | an array describing the state of the random number generator. | 
|  | 1695 |  | 
|  | 1696 | This function can be called subsequently since it updates the array to | 
|  | 1697 | guarantee random numbers.  The array should have been initialized before | 
|  | 1698 | initial 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{}}} | 
|  | 1705 | The @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 | 
|  | 1707 | int} type can take more than 32 bits, no higher numbers are returned. | 
|  | 1708 | The random bits are determined by the global state of the random number | 
|  | 1709 | generator 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{}}} | 
|  | 1716 | This function is similar to the @code{lrand48} function in that it | 
|  | 1717 | returns a number in the range of @code{0} to @code{2^31} (exclusive) but | 
|  | 1718 | the state of the random number generator used to produce the random bits | 
|  | 1719 | is determined by the array provided as the parameter to the function. | 
|  | 1720 |  | 
|  | 1721 | The numbers in the array are updated afterwards so that subsequent calls | 
|  | 1722 | to this function yield different results (as is expected of a random | 
|  | 1723 | number generator).  The array should have been initialized before the | 
|  | 1724 | first call to obtain reproducible results. | 
|  | 1725 | @end deftypefun | 
|  | 1726 |  | 
|  | 1727 | @comment stdlib.h | 
|  | 1728 | @comment SVID | 
|  | 1729 | @deftypefun {long int} mrand48 (void) | 
|  | 1730 | @safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} | 
|  | 1731 | The @code{mrand48} function is similar to @code{lrand48}.  The only | 
|  | 1732 | difference 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{}}} | 
|  | 1740 | The @code{jrand48} function is similar to @code{nrand48}.  The only | 
|  | 1741 | difference 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 | 
|  | 1743 | requirements are necessary. | 
|  | 1744 | @end deftypefun | 
|  | 1745 |  | 
|  | 1746 | The internal state of the random number generator can be initialized in | 
|  | 1747 | several ways.  The methods differ in the completeness of the | 
|  | 1748 | information 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{}}} | 
|  | 1754 | The @code{srand48} function sets the most significant 32 bits of the | 
|  | 1755 | internal state of the random number generator to the least | 
|  | 1756 | significant 32 bits of the @var{seedval} parameter.  The lower 16 bits | 
|  | 1757 | are initialized to the value @code{0x330E}.  Even if the @code{long | 
|  | 1758 | int} type contains more than 32 bits only the lower 32 bits are used. | 
|  | 1759 |  | 
|  | 1760 | Owing to this limitation, initialization of the state of this | 
|  | 1761 | function is not very useful.  But it makes it easy to use a construct | 
|  | 1762 | like @code{srand48 (time (0))}. | 
|  | 1763 |  | 
|  | 1764 | A side-effect of this function is that the values @code{a} and @code{c} | 
|  | 1765 | from the internal state, which are used in the congruential formula, | 
|  | 1766 | are reset to the default values given above.  This is of importance once | 
|  | 1767 | the 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{}}} | 
|  | 1774 | The @code{seed48} function initializes all 48 bits of the state of the | 
|  | 1775 | internal 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 | 
|  | 1778 | state, the lower 16 bits of @code{@var{seed16v}[1]} initialize the mid-order | 
|  | 1779 | 16 bits of the state and the 16 lower bits of @code{@var{seed16v}[2]} | 
|  | 1780 | initialize the most significant 16 bits of the state. | 
|  | 1781 |  | 
|  | 1782 | Unlike @code{srand48} this function lets the user initialize all 48 bits | 
|  | 1783 | of the state. | 
|  | 1784 |  | 
|  | 1785 | The value returned by @code{seed48} is a pointer to an array containing | 
|  | 1786 | the values of the internal state before the change.  This might be | 
|  | 1787 | useful to restart the random number generator at a certain state. | 
|  | 1788 | Otherwise the value can simply be ignored. | 
|  | 1789 |  | 
|  | 1790 | As for @code{srand48}, the values @code{a} and @code{c} from the | 
|  | 1791 | congruential formula are reset to the default values. | 
|  | 1792 | @end deftypefun | 
|  | 1793 |  | 
|  | 1794 | There is one more function to initialize the random number generator | 
|  | 1795 | which enables you to specify even more information by allowing you to | 
|  | 1796 | change 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{}}} | 
|  | 1802 | The @code{lcong48} function allows the user to change the complete state | 
|  | 1803 | of the random number generator.  Unlike @code{srand48} and | 
|  | 1804 | @code{seed48}, this function also changes the constants in the | 
|  | 1805 | congruential formula. | 
|  | 1806 |  | 
|  | 1807 | From the seven elements in the array @var{param} the least significant | 
|  | 1808 | 16 bits of the entries @code{@var{param}[0]} to @code{@var{param}[2]} | 
|  | 1809 | determine the initial state, the least significant 16 bits of | 
|  | 1810 | @code{@var{param}[3]} to @code{@var{param}[5]} determine the 48 bit | 
|  | 1811 | constant @code{a} and @code{@var{param}[6]} determines the 16-bit value | 
|  | 1812 | @code{c}. | 
|  | 1813 | @end deftypefun | 
|  | 1814 |  | 
|  | 1815 | All the above functions have in common that they use the global | 
|  | 1816 | parameters for the congruential formula.  In multi-threaded programs it | 
|  | 1817 | might sometimes be useful to have different parameters in different | 
|  | 1818 | threads.  For this reason all the above functions have a counterpart | 
|  | 1819 | which works on a description of the random number generator in the | 
|  | 1820 | user-supplied buffer instead of the global state. | 
|  | 1821 |  | 
|  | 1822 | Please note that it is no problem if several threads use the global | 
|  | 1823 | state if all threads use the functions which take a pointer to an array | 
|  | 1824 | containing the state.  The random numbers are computed following the | 
|  | 1825 | same loop but if the state in the array is different all threads will | 
|  | 1826 | obtain an individual random number generator. | 
|  | 1827 |  | 
|  | 1828 | The user-supplied buffer must be of type @code{struct drand48_data}. | 
|  | 1829 | This 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{}}} | 
|  | 1835 | This function is equivalent to the @code{drand48} function with the | 
|  | 1836 | difference that it does not modify the global random number generator | 
|  | 1837 | parameters but instead the parameters in the buffer supplied through the | 
|  | 1838 | pointer @var{buffer}.  The random number is returned in the variable | 
|  | 1839 | pointed to by @var{result}. | 
|  | 1840 |  | 
|  | 1841 | The return value of the function indicates whether the call succeeded. | 
|  | 1842 | If the value is less than @code{0} an error occurred and @var{errno} is | 
|  | 1843 | set to indicate the problem. | 
|  | 1844 |  | 
|  | 1845 | This function is a GNU extension and should not be used in portable | 
|  | 1846 | programs. | 
|  | 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{}}} | 
|  | 1853 | The @code{erand48_r} function works like @code{erand48}, but in addition | 
|  | 1854 | it takes an argument @var{buffer} which describes the random number | 
|  | 1855 | generator.  The state of the random number generator is taken from the | 
|  | 1856 | @code{xsubi} array, the parameters for the congruential formula from the | 
|  | 1857 | global random number generator data.  The random number is returned in | 
|  | 1858 | the variable pointed to by @var{result}. | 
|  | 1859 |  | 
|  | 1860 | The return value is non-negative if the call succeeded. | 
|  | 1861 |  | 
|  | 1862 | This function is a GNU extension and should not be used in portable | 
|  | 1863 | programs. | 
|  | 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{}}} | 
|  | 1870 | This function is similar to @code{lrand48}, but in addition it takes a | 
|  | 1871 | pointer to a buffer describing the state of the random number generator | 
|  | 1872 | just like @code{drand48}. | 
|  | 1873 |  | 
|  | 1874 | If the return value of the function is non-negative the variable pointed | 
|  | 1875 | to by @var{result} contains the result.  Otherwise an error occurred. | 
|  | 1876 |  | 
|  | 1877 | This function is a GNU extension and should not be used in portable | 
|  | 1878 | programs. | 
|  | 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{}}} | 
|  | 1885 | The @code{nrand48_r} function works like @code{nrand48} in that it | 
|  | 1886 | produces a random number in the range @code{0} to @code{2^31}.  But instead | 
|  | 1887 | of using the global parameters for the congruential formula it uses the | 
|  | 1888 | information from the buffer pointed to by @var{buffer}.  The state is | 
|  | 1889 | described by the values in @var{xsubi}. | 
|  | 1890 |  | 
|  | 1891 | If the return value is non-negative the variable pointed to by | 
|  | 1892 | @var{result} contains the result. | 
|  | 1893 |  | 
|  | 1894 | This function is a GNU extension and should not be used in portable | 
|  | 1895 | programs. | 
|  | 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{}}} | 
|  | 1902 | This function is similar to @code{mrand48} but like the other reentrant | 
|  | 1903 | functions it uses the random number generator described by the value in | 
|  | 1904 | the buffer pointed to by @var{buffer}. | 
|  | 1905 |  | 
|  | 1906 | If the return value is non-negative the variable pointed to by | 
|  | 1907 | @var{result} contains the result. | 
|  | 1908 |  | 
|  | 1909 | This function is a GNU extension and should not be used in portable | 
|  | 1910 | programs. | 
|  | 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{}}} | 
|  | 1917 | The @code{jrand48_r} function is similar to @code{jrand48}.  Like the | 
|  | 1918 | other reentrant functions of this function family it uses the | 
|  | 1919 | congruential formula parameters from the buffer pointed to by | 
|  | 1920 | @var{buffer}. | 
|  | 1921 |  | 
|  | 1922 | If the return value is non-negative the variable pointed to by | 
|  | 1923 | @var{result} contains the result. | 
|  | 1924 |  | 
|  | 1925 | This function is a GNU extension and should not be used in portable | 
|  | 1926 | programs. | 
|  | 1927 | @end deftypefun | 
|  | 1928 |  | 
|  | 1929 | Before any of the above functions are used the buffer of type | 
|  | 1930 | @code{struct drand48_data} should be initialized.  The easiest way to do | 
|  | 1931 | this is to fill the whole buffer with null bytes, e.g. by | 
|  | 1932 |  | 
|  | 1933 | @smallexample | 
|  | 1934 | memset (buffer, '\0', sizeof (struct drand48_data)); | 
|  | 1935 | @end smallexample | 
|  | 1936 |  | 
|  | 1937 | @noindent | 
|  | 1938 | Using any of the reentrant functions of this family now will | 
|  | 1939 | automatically initialize the random number generator to the default | 
|  | 1940 | values for the state and the parameters of the congruential formula. | 
|  | 1941 |  | 
|  | 1942 | The other possibility is to use any of the functions which explicitly | 
|  | 1943 | initialize the buffer.  Though it might be obvious how to initialize the | 
|  | 1944 | buffer from looking at the parameter to the function, it is highly | 
|  | 1945 | recommended to use these functions since the result might not always be | 
|  | 1946 | what 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{}}} | 
|  | 1952 | The description of the random number generator represented by the | 
|  | 1953 | information 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 | 
|  | 1956 | initialized to their default values. | 
|  | 1957 |  | 
|  | 1958 | If the return value is non-negative the function call succeeded. | 
|  | 1959 |  | 
|  | 1960 | This function is a GNU extension and should not be used in portable | 
|  | 1961 | programs. | 
|  | 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{}}} | 
|  | 1968 | This function is similar to @code{srand48_r} but like @code{seed48} it | 
|  | 1969 | initializes all 48 bits of the state from the parameter @var{seed16v}. | 
|  | 1970 |  | 
|  | 1971 | If the return value is non-negative the function call succeeded.  It | 
|  | 1972 | does not return a pointer to the previous state of the random number | 
|  | 1973 | generator like the @code{seed48} function does.  If the user wants to | 
|  | 1974 | preserve the state for a later re-run s/he can copy the whole buffer | 
|  | 1975 | pointed to by @var{buffer}. | 
|  | 1976 |  | 
|  | 1977 | This function is a GNU extension and should not be used in portable | 
|  | 1978 | programs. | 
|  | 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{}}} | 
|  | 1985 | This function initializes all aspects of the random number generator | 
|  | 1986 | described in @var{buffer} with the data in @var{param}.  Here it is | 
|  | 1987 | especially true that the function does more than just copying the | 
|  | 1988 | contents of @var{param} and @var{buffer}.  More work is required and | 
|  | 1989 | therefore it is important to use this function rather than initializing | 
|  | 1990 | the random number generator directly. | 
|  | 1991 |  | 
|  | 1992 | If the return value is non-negative the function call succeeded. | 
|  | 1993 |  | 
|  | 1994 | This function is a GNU extension and should not be used in portable | 
|  | 1995 | programs. | 
|  | 1996 | @end deftypefun | 
|  | 1997 |  | 
|  | 1998 | @node FP Function Optimizations | 
|  | 1999 | @section Is Fast Code or Small Code preferred? | 
|  | 2000 | @cindex Optimization | 
|  | 2001 |  | 
|  | 2002 | If an application uses many floating point functions it is often the case | 
|  | 2003 | that the cost of the function calls themselves is not negligible. | 
|  | 2004 | Modern processors can often execute the operations themselves | 
|  | 2005 | very fast, but the function call disrupts the instruction pipeline. | 
|  | 2006 |  | 
|  | 2007 | For this reason @theglibc{} provides optimizations for many of the | 
|  | 2008 | frequently-used math functions.  When GNU CC is used and the user | 
|  | 2009 | activates the optimizer, several new inline functions and macros are | 
|  | 2010 | defined.  These new functions and macros have the same names as the | 
|  | 2011 | library functions and so are used instead of the latter.  In the case of | 
|  | 2012 | inline functions the compiler will decide whether it is reasonable to | 
|  | 2013 | use them, and this decision is usually correct. | 
|  | 2014 |  | 
|  | 2015 | This means that no calls to the library functions may be necessary, and | 
|  | 2016 | can increase the speed of generated code significantly.  The drawback is | 
|  | 2017 | that code size will increase, and the increase is not always negligible. | 
|  | 2018 |  | 
|  | 2019 | There are two kind of inline functions: Those that give the same result | 
|  | 2020 | as the library functions and others that might not set @code{errno} and | 
|  | 2021 | might have a reduced precision and/or argument range in comparison with | 
|  | 2022 | the library functions.  The latter inline functions are only available | 
|  | 2023 | if the flag @code{-ffast-math} is given to GNU CC. | 
|  | 2024 |  | 
|  | 2025 | In 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 | 
|  | 2027 | included.  This will ensure that only library functions are used.  Of | 
|  | 2028 | course, it can be determined for each file in the project whether | 
|  | 2029 | giving this option is preferable or not. | 
|  | 2030 |  | 
|  | 2031 | Not all hardware implements the entire @w{IEEE 754} standard, and even | 
|  | 2032 | if it does there may be a substantial performance penalty for using some | 
|  | 2033 | of its features.  For example, enabling traps on some processors forces | 
|  | 2034 | the FPU to run un-pipelined, which can more than double calculation time. | 
|  | 2035 | @c ***Add explanation of -lieee, -mieee. |