File: Unix-random-number-generators.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (178 lines) | stat: -rw-r--r-- 8,929 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".

(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library &ndash; Reference Manual: Unix random number generators</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Unix random number generators">
<meta name="keywords" content="GNU Scientific Library &ndash; Reference Manual: Unix random number generators">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Random-Number-Generation.html#Random-Number-Generation" rel="up" title="Random Number Generation">
<link href="Other-random-number-generators.html#Other-random-number-generators" rel="next" title="Other random number generators">
<link href="Random-number-generator-algorithms.html#Random-number-generator-algorithms" rel="previous" title="Random number generator algorithms">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Unix-random-number-generators"></a>
<div class="header">
<p>
Next: <a href="Other-random-number-generators.html#Other-random-number-generators" accesskey="n" rel="next">Other random number generators</a>, Previous: <a href="Random-number-generator-algorithms.html#Random-number-generator-algorithms" accesskey="p" rel="previous">Random number generator algorithms</a>, Up: <a href="Random-Number-Generation.html#Random-Number-Generation" accesskey="u" rel="up">Random Number Generation</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Unix-random-number-generators-1"></a>
<h3 class="section">18.10 Unix random number generators</h3>

<p>The standard Unix random number generators <code>rand</code>, <code>random</code>
and <code>rand48</code> are provided as part of GSL. Although these
generators are widely available individually often they aren&rsquo;t all
available on the same platform.  This makes it difficult to write
portable code using them and so we have included the complete set of
Unix generators in GSL for convenience.  Note that these generators
don&rsquo;t produce high-quality randomness and aren&rsquo;t suitable for work
requiring accurate statistics.  However, if you won&rsquo;t be measuring
statistical quantities and just want to introduce some variation into
your program then these generators are quite acceptable.
</p>
<a name="index-rand_002c-BSD-random-number-generator"></a>
<a name="index-Unix-random-number-generators_002c-rand"></a>
<a name="index-Unix-random-number-generators_002c-rand48"></a>

<dl>
<dt><a name="index-gsl_005frng_005frand"></a>Generator: <strong>gsl_rng_rand</strong></dt>
<dd><a name="index-BSD-random-number-generator"></a>
<p>This is the BSD <code>rand</code> generator.  Its sequence is
</p>
<div class="example">
<pre class="example">x_{n+1} = (a x_n + c) mod m
</pre></div>

<p>with 
<em>a = 1103515245</em>, 
<em>c = 12345</em> and 
<em>m = 2^31</em>.
The seed specifies the initial value, 
<em>x_1</em>.  The period of this
generator is 
<em>2^31</em>, and it uses 1 word of storage per
generator.
</p></dd></dl>

<dl>
<dt><a name="index-gsl_005frng_005frandom_005fbsd"></a>Generator: <strong>gsl_rng_random_bsd</strong></dt>
<dt><a name="index-gsl_005frng_005frandom_005flibc5"></a>Generator: <strong>gsl_rng_random_libc5</strong></dt>
<dt><a name="index-gsl_005frng_005frandom_005fglibc2"></a>Generator: <strong>gsl_rng_random_glibc2</strong></dt>
<dd><p>These generators implement the <code>random</code> family of functions, a
set of linear feedback shift register generators originally used in BSD
Unix.  There are several versions of <code>random</code> in use today: the
original BSD version (e.g. on SunOS4), a libc5 version (found on
older GNU/Linux systems) and a glibc2 version.  Each version uses a
different seeding procedure, and thus produces different sequences.
</p>
<p>The original BSD routines accepted a variable length buffer for the
generator state, with longer buffers providing higher-quality
randomness.  The <code>random</code> function implemented algorithms for
buffer lengths of 8, 32, 64, 128 and 256 bytes, and the algorithm with
the largest length that would fit into the user-supplied buffer was
used.  To support these algorithms additional generators are available
with the following names,
</p>
<div class="example">
<pre class="example">gsl_rng_random8_bsd
gsl_rng_random32_bsd
gsl_rng_random64_bsd
gsl_rng_random128_bsd
gsl_rng_random256_bsd
</pre></div>

<p>where the numeric suffix indicates the buffer length.  The original BSD
<code>random</code> function used a 128-byte default buffer and so
<code>gsl_rng_random_bsd</code> has been made equivalent to
<code>gsl_rng_random128_bsd</code>.  Corresponding versions of the <code>libc5</code>
and <code>glibc2</code> generators are also available, with the names
<code>gsl_rng_random8_libc5</code>, <code>gsl_rng_random8_glibc2</code>, etc.
</p></dd></dl>

<dl>
<dt><a name="index-gsl_005frng_005frand48"></a>Generator: <strong>gsl_rng_rand48</strong></dt>
<dd><a name="index-rand48-random-number-generator"></a>
<p>This is the Unix <code>rand48</code> generator.  Its sequence is
</p>
<div class="example">
<pre class="example">x_{n+1} = (a x_n + c) mod m
</pre></div>

<p>defined on 48-bit unsigned integers with 
<em>a = 25214903917</em>, 
<em>c = 11</em> and 
<em>m = 2^48</em>. 
The seed specifies the upper 32 bits of the initial value, <em>x_1</em>,
with the lower 16 bits set to <code>0x330E</code>.  The function
<code>gsl_rng_get</code> returns the upper 32 bits from each term of the
sequence.  This does not have a direct parallel in the original
<code>rand48</code> functions, but forcing the result to type <code>long int</code>
reproduces the output of <code>mrand48</code>.  The function
<code>gsl_rng_uniform</code> uses the full 48 bits of internal state to return
the double precision number <em>x_n/m</em>, which is equivalent to the
function <code>drand48</code>.  Note that some versions of the GNU C Library
contained a bug in <code>mrand48</code> function which caused it to produce
different results (only the lower 16-bits of the return value were set).
</p></dd></dl>

<hr>
<div class="header">
<p>
Next: <a href="Other-random-number-generators.html#Other-random-number-generators" accesskey="n" rel="next">Other random number generators</a>, Previous: <a href="Random-number-generator-algorithms.html#Random-number-generator-algorithms" accesskey="p" rel="previous">Random number generator algorithms</a>, Up: <a href="Random-Number-Generation.html#Random-Number-Generation" accesskey="u" rel="up">Random Number Generation</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>