1 | .\" Copyright (c) 1983 Regents of the University of California.
|
---|
2 | .\" All rights reserved. The Berkeley software License Agreement
|
---|
3 | .\" specifies the terms and conditions for redistribution.
|
---|
4 | .\"
|
---|
5 | .\" @(#)random.3 6.2 (Berkeley) 9/29/85
|
---|
6 | .\"
|
---|
7 | .TH RANDOM 3 "September 29, 1985"
|
---|
8 | .UC 5
|
---|
9 | .SH NAME
|
---|
10 | random, srandom, initstate, setstate \- better random number generator; routines for changing generators
|
---|
11 | .SH SYNOPSIS
|
---|
12 | .nf
|
---|
13 | .ft B
|
---|
14 | #include <stdlib.h>
|
---|
15 |
|
---|
16 | long random(void)
|
---|
17 | void srandom(unsigned \fIseed\fP)
|
---|
18 | char *initstate(unsigned \fIseed\fP, char *\fIstate\fP, int \fIn\fP)
|
---|
19 | char *setstate(char *\fIstate\fP)
|
---|
20 | .ft R
|
---|
21 | .fi
|
---|
22 | .SH DESCRIPTION
|
---|
23 | .PP
|
---|
24 | .B Random
|
---|
25 | uses a non-linear additive feedback random number generator employing a
|
---|
26 | default table of size 31 long integers to return successive pseudo-random
|
---|
27 | numbers in the range from 0 to
|
---|
28 | .if t 2\u\s731\s10\d\(mi1.
|
---|
29 | .if n (2**31)\(mi1.
|
---|
30 | The period of this random number generator is very large, approximately
|
---|
31 | .if t 16\(mu(2\u\s731\s10\d\(mi1).
|
---|
32 | .if n 16*((2**31)\(mi1).
|
---|
33 | .PP
|
---|
34 | .B Random/srandom
|
---|
35 | have (almost) the same calling sequence and initialization properties as
|
---|
36 | .B rand/srand.
|
---|
37 | The difference is that
|
---|
38 | .BR rand (3)
|
---|
39 | produces a much less random sequence \(em in fact, the low dozen bits
|
---|
40 | generated by rand go through a cyclic pattern. All the bits generated by
|
---|
41 | .B random
|
---|
42 | are usable. For example, ``random()&01'' will produce a random binary
|
---|
43 | value.
|
---|
44 | .PP
|
---|
45 | Unlike
|
---|
46 | .BR srand ,
|
---|
47 | .B srandom
|
---|
48 | does not return the old seed; the reason for this is that the amount of
|
---|
49 | state information used is much more than a single word. (Two other
|
---|
50 | routines are provided to deal with restarting/changing random
|
---|
51 | number generators). Like
|
---|
52 | .BR rand (3),
|
---|
53 | however,
|
---|
54 | .B random
|
---|
55 | will by default produce a sequence of numbers that can be duplicated
|
---|
56 | by calling
|
---|
57 | .B srandom
|
---|
58 | with
|
---|
59 | .B 1
|
---|
60 | as the seed.
|
---|
61 | .PP
|
---|
62 | The
|
---|
63 | .B initstate
|
---|
64 | routine allows a state array, passed in as an argument, to be initialized
|
---|
65 | for future use. The size of the state array (in bytes) is used by
|
---|
66 | .B initstate
|
---|
67 | to decide how sophisticated a random number generator it should use -- the
|
---|
68 | more state, the better the random numbers will be.
|
---|
69 | (Current "optimal" values for the amount of state information are
|
---|
70 | 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to
|
---|
71 | the nearest known amount. Using less than 8 bytes will cause an error).
|
---|
72 | The seed for the initialization (which specifies a starting point for
|
---|
73 | the random number sequence, and provides for restarting at the same
|
---|
74 | point) is also an argument.
|
---|
75 | .B Initstate
|
---|
76 | returns a pointer to the previous state information array.
|
---|
77 | .PP
|
---|
78 | Once a state has been initialized, the
|
---|
79 | .B setstate
|
---|
80 | routine provides for rapid switching between states.
|
---|
81 | .B Setstate
|
---|
82 | returns a pointer to the previous state array; its
|
---|
83 | argument state array is used for further random number generation
|
---|
84 | until the next call to
|
---|
85 | .B initstate
|
---|
86 | or
|
---|
87 | .BR setstate .
|
---|
88 | .PP
|
---|
89 | Once a state array has been initialized, it may be restarted at a
|
---|
90 | different point either by calling
|
---|
91 | .B initstate
|
---|
92 | (with the desired seed, the state array, and its size) or by calling
|
---|
93 | both
|
---|
94 | .B setstate
|
---|
95 | (with the state array) and
|
---|
96 | .B srandom
|
---|
97 | (with the desired seed).
|
---|
98 | The advantage of calling both
|
---|
99 | .B setstate
|
---|
100 | and
|
---|
101 | .B srandom
|
---|
102 | is that the size of the state array does not have to be remembered after
|
---|
103 | it is initialized.
|
---|
104 | .PP
|
---|
105 | With 256 bytes of state information, the period of the random number
|
---|
106 | generator is greater than
|
---|
107 | .if t 2\u\s769\s10\d,
|
---|
108 | .if n 2**69
|
---|
109 | which should be sufficient for most purposes.
|
---|
110 | .SH AUTHOR
|
---|
111 | Earl T. Cohen
|
---|
112 | .SH DIAGNOSTICS
|
---|
113 | .PP
|
---|
114 | If
|
---|
115 | .B initstate
|
---|
116 | is called with less than 8 bytes of state information, or if
|
---|
117 | .B setstate
|
---|
118 | detects that the state information has been garbled, error
|
---|
119 | messages are printed on the standard error output.
|
---|
120 | .SH "SEE ALSO"
|
---|
121 | .BR rand (3).
|
---|
122 | .SH NOTES
|
---|
123 | .B initstate
|
---|
124 | and
|
---|
125 | .B setstate
|
---|
126 | are not declared in
|
---|
127 | .IR <stdlib.h> ,
|
---|
128 | programmers must provide their own declarations.
|
---|
129 | .SH BUGS
|
---|
130 | About 2/3 the speed of
|
---|
131 | .BR rand (3).
|
---|