| <html lang="en"> |
| <head> |
| <title>rand48 - Untitled</title> |
| <meta http-equiv="Content-Type" content="text/html"> |
| <meta name="description" content="Untitled"> |
| <meta name="generator" content="makeinfo 4.13"> |
| <link title="Top" rel="start" href="index.html#Top"> |
| <link rel="up" href="Stdlib.html#Stdlib" title="Stdlib"> |
| <link rel="prev" href="rand.html#rand" title="rand"> |
| <link rel="next" href="strtod.html#strtod" title="strtod"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <style type="text/css"><!-- |
| pre.display { font-family:inherit } |
| pre.format { font-family:inherit } |
| pre.smalldisplay { font-family:inherit; font-size:smaller } |
| pre.smallformat { font-family:inherit; font-size:smaller } |
| pre.smallexample { font-size:smaller } |
| pre.smalllisp { font-size:smaller } |
| span.sc { font-variant:small-caps } |
| span.roman { font-family:serif; font-weight:normal; } |
| span.sansserif { font-family:sans-serif; font-weight:normal; } |
| --></style> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="rand48"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="strtod.html#strtod">strtod</a>, |
| Previous: <a rel="previous" accesskey="p" href="rand.html#rand">rand</a>, |
| Up: <a rel="up" accesskey="u" href="Stdlib.html#Stdlib">Stdlib</a> |
| <hr> |
| </div> |
| |
| <h3 class="section">2.33 <code>rand48</code>, <code>drand48</code>, <code>erand48</code>, <code>lrand48</code>, <code>nrand48</code>, <code>mrand48</code>, <code>jrand48</code>, <code>srand48</code>, <code>seed48</code>, <code>lcong48</code>—pseudo-random number generators and initialization routines</h3> |
| |
| <p><a name="index-rand48-69"></a><a name="index-drand48-70"></a><a name="index-erand48-71"></a><a name="index-lrand48-72"></a><a name="index-nrand48-73"></a><a name="index-mrand48-74"></a><a name="index-jrand48-75"></a><a name="index-srand48-76"></a><a name="index-seed48-77"></a><a name="index-lcong48-78"></a><strong>Synopsis</strong> |
| <pre class="example"> #include <stdlib.h> |
| double drand48(void); |
| double erand48(unsigned short <var>xseed</var>[3]); |
| long lrand48(void); |
| long nrand48(unsigned short <var>xseed</var>[3]); |
| long mrand48(void); |
| long jrand48(unsigned short <var>xseed</var>[3]); |
| void srand48(long <var>seed</var>); |
| unsigned short *seed48(unsigned short <var>xseed</var>[3]); |
| void lcong48(unsigned short <var>p</var>[7]); |
| |
| </pre> |
| <p><strong>Description</strong><br> |
| The <code>rand48</code> family of functions generates pseudo-random numbers |
| using a linear congruential algorithm working on integers 48 bits in size. |
| The particular formula employed is |
| r(n+1) = (a * r(n) + c) mod m |
| where the default values are |
| for the multiplicand a = 0xfdeece66d = 25214903917 and |
| the addend c = 0xb = 11. The modulo is always fixed at m = 2 ** 48. |
| r(n) is called the seed of the random number generator. |
| |
| <p>For all the six generator routines described next, the first |
| computational step is to perform a single iteration of the algorithm. |
| |
| <p><code>drand48</code> and <code>erand48</code> |
| return values of type double. The full 48 bits of r(n+1) are |
| loaded into the mantissa of the returned value, with the exponent set |
| such that the values produced lie in the interval [0.0, 1.0]. |
| |
| <p><code>lrand48</code> and <code>nrand48</code> |
| return values of type long in the range |
| [0, 2**31-1]. The high-order (31) bits of |
| r(n+1) are loaded into the lower bits of the returned value, with |
| the topmost (sign) bit set to zero. |
| |
| <p><code>mrand48</code> and <code>jrand48</code> |
| return values of type long in the range |
| [-2**31, 2**31-1]. The high-order (32) bits of |
| r(n+1) are loaded into the returned value. |
| |
| <p><code>drand48</code>, <code>lrand48</code>, and <code>mrand48</code> |
| use an internal buffer to store r(n). For these functions |
| the initial value of r(0) = 0x1234abcd330e = 20017429951246. |
| |
| <p>On the other hand, <code>erand48</code>, <code>nrand48</code>, and <code>jrand48</code> |
| use a user-supplied buffer to store the seed r(n), |
| which consists of an array of 3 shorts, where the zeroth member |
| holds the least significant bits. |
| |
| <p>All functions share the same multiplicand and addend. |
| |
| <p><code>srand48</code> is used to initialize the internal buffer r(n) of |
| <code>drand48</code>, <code>lrand48</code>, and <code>mrand48</code> |
| such that the 32 bits of the seed value are copied into the upper 32 bits |
| of r(n), with the lower 16 bits of r(n) arbitrarily being set to 0x330e. |
| Additionally, the constant multiplicand and addend of the algorithm are |
| reset to the default values given above. |
| |
| <p><code>seed48</code> also initializes the internal buffer r(n) of |
| <code>drand48</code>, <code>lrand48</code>, and <code>mrand48</code>, |
| but here all 48 bits of the seed can be specified in an array of 3 shorts, |
| where the zeroth member specifies the lowest bits. Again, |
| the constant multiplicand and addend of the algorithm are |
| reset to the default values given above. |
| <code>seed48</code> returns a pointer to an array of 3 shorts which contains |
| the old seed. |
| This array is statically allocated, thus its contents are lost after |
| each new call to <code>seed48</code>. |
| |
| <p>Finally, <code>lcong48</code> allows full control over the multiplicand and |
| addend used in <code>drand48</code>, <code>erand48</code>, <code>lrand48</code>, <code>nrand48</code>, |
| <code>mrand48</code>, and <code>jrand48</code>, |
| and the seed used in <code>drand48</code>, <code>lrand48</code>, and <code>mrand48</code>. |
| An array of 7 shorts is passed as parameter; the first three shorts are |
| used to initialize the seed; the second three are used to initialize the |
| multiplicand; and the last short is used to initialize the addend. |
| It is thus not possible to use values greater than 0xffff as the addend. |
| |
| <p>Note that all three methods of seeding the random number generator |
| always also set the multiplicand and addend for any of the six |
| generator calls. |
| |
| <p>For a more powerful random number generator, see <code>random</code>. |
| |
| <p><br> |
| <strong>Portability</strong><br> |
| SUS requires these functions. |
| |
| <p>No supporting OS subroutines are required. |
| |
| <p><br> |
| |
| </body></html> |
| |