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. |