Blame


1 cfa37a7b 2004-04-10 devnull .TH RAND 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull rand, lrand, frand, nrand, lnrand, srand, truerand, ntruerand, fastrand, nfastrand \- random number generator
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .PP
9 cfa37a7b 2004-04-10 devnull .ta \w'\fLdouble 'u
10 cfa37a7b 2004-04-10 devnull .B
11 cfa37a7b 2004-04-10 devnull int rand(void)
12 cfa37a7b 2004-04-10 devnull .PP
13 cfa37a7b 2004-04-10 devnull .B
14 cfa37a7b 2004-04-10 devnull long lrand(void)
15 cfa37a7b 2004-04-10 devnull .PP
16 cfa37a7b 2004-04-10 devnull .B
17 cfa37a7b 2004-04-10 devnull double frand(void)
18 cfa37a7b 2004-04-10 devnull .PP
19 cfa37a7b 2004-04-10 devnull .B
20 cfa37a7b 2004-04-10 devnull int nrand(int val)
21 cfa37a7b 2004-04-10 devnull .PP
22 cfa37a7b 2004-04-10 devnull .B
23 cfa37a7b 2004-04-10 devnull long lnrand(long val)
24 cfa37a7b 2004-04-10 devnull .PP
25 cfa37a7b 2004-04-10 devnull .B
26 cfa37a7b 2004-04-10 devnull void srand(long seed)
27 cfa37a7b 2004-04-10 devnull .PP
28 cfa37a7b 2004-04-10 devnull .B
29 cfa37a7b 2004-04-10 devnull ulong truerand(void)
30 cfa37a7b 2004-04-10 devnull .PP
31 cfa37a7b 2004-04-10 devnull .B
32 cfa37a7b 2004-04-10 devnull ulong ntruerand(ulong val)
33 cfa37a7b 2004-04-10 devnull .sp
34 cfa37a7b 2004-04-10 devnull .B #include <mp.h>
35 cfa37a7b 2004-04-10 devnull .br
36 cfa37a7b 2004-04-10 devnull .B #include <libsec.h>
37 cfa37a7b 2004-04-10 devnull .PP
38 cfa37a7b 2004-04-10 devnull .B
39 cfa37a7b 2004-04-10 devnull void genrandom(uchar *buf, int nbytes)
40 cfa37a7b 2004-04-10 devnull .PP
41 cfa37a7b 2004-04-10 devnull .B
42 cfa37a7b 2004-04-10 devnull void prng(uchar *buf, int nbytes)
43 cfa37a7b 2004-04-10 devnull .PP
44 cfa37a7b 2004-04-10 devnull .B
45 cfa37a7b 2004-04-10 devnull ulong fastrand(void)
46 cfa37a7b 2004-04-10 devnull .PP
47 cfa37a7b 2004-04-10 devnull .B
48 cfa37a7b 2004-04-10 devnull ulong nfastrand(ulong val)
49 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
50 cfa37a7b 2004-04-10 devnull .I Rand
51 cfa37a7b 2004-04-10 devnull returns a uniform pseudo-random
52 cfa37a7b 2004-04-10 devnull number
53 cfa37a7b 2004-04-10 devnull .IR x ,
54 cfa37a7b 2004-04-10 devnull .RI 0≤ x <2\u\s715\s10\d.
55 cfa37a7b 2004-04-10 devnull .PP
56 cfa37a7b 2004-04-10 devnull .I Lrand
57 cfa37a7b 2004-04-10 devnull returns a uniform
58 cfa37a7b 2004-04-10 devnull .B long
59 cfa37a7b 2004-04-10 devnull .IR x ,
60 cfa37a7b 2004-04-10 devnull .RI 0≤ x <2\u\s731\s10\d.
61 cfa37a7b 2004-04-10 devnull .PP
62 cfa37a7b 2004-04-10 devnull .I Frand
63 cfa37a7b 2004-04-10 devnull returns a uniform
64 cfa37a7b 2004-04-10 devnull .B double
65 cfa37a7b 2004-04-10 devnull .IR x ,
66 cfa37a7b 2004-04-10 devnull .RI 0.0≤ x <1.0,
67 cfa37a7b 2004-04-10 devnull This function calls
68 cfa37a7b 2004-04-10 devnull .I lrand
69 cfa37a7b 2004-04-10 devnull twice to generate a number with as many as 62 significant bits of mantissa.
70 cfa37a7b 2004-04-10 devnull .PP
71 cfa37a7b 2004-04-10 devnull .I Nrand
72 cfa37a7b 2004-04-10 devnull returns a uniform integer
73 cfa37a7b 2004-04-10 devnull .IR x ,
74 cfa37a7b 2004-04-10 devnull .RI 0≤ x < val.
75 cfa37a7b 2004-04-10 devnull .I Lnrand
76 cfa37a7b 2004-04-10 devnull is the same, but returns a
77 cfa37a7b 2004-04-10 devnull .BR long .
78 cfa37a7b 2004-04-10 devnull .PP
79 cfa37a7b 2004-04-10 devnull The algorithm is additive feedback with:
80 cfa37a7b 2004-04-10 devnull .IP
81 cfa37a7b 2004-04-10 devnull x[n] = (x[n\(mi273] + x[n\(mi607]) mod
82 cfa37a7b 2004-04-10 devnull .if t 2\u\s731\s0\d
83 cfa37a7b 2004-04-10 devnull .if n 2^31
84 cfa37a7b 2004-04-10 devnull .LP
85 cfa37a7b 2004-04-10 devnull giving a period of
86 cfa37a7b 2004-04-10 devnull .if t 2\u\s730\s10\d \(mu (2\u\s7607\s10\d \- 1).
87 cfa37a7b 2004-04-10 devnull .if n 2^30 × (2^607 - 1).
88 cfa37a7b 2004-04-10 devnull .PP
89 cfa37a7b 2004-04-10 devnull The generators are initialized by calling
90 cfa37a7b 2004-04-10 devnull .I srand
91 cfa37a7b 2004-04-10 devnull with whatever you like as argument.
92 cfa37a7b 2004-04-10 devnull To get a different starting value each time,
93 cfa37a7b 2004-04-10 devnull .IP
94 cfa37a7b 2004-04-10 devnull .L
95 cfa37a7b 2004-04-10 devnull srand(time(0))
96 cfa37a7b 2004-04-10 devnull .LP
97 cfa37a7b 2004-04-10 devnull will work as long as it is not called more often
98 cfa37a7b 2004-04-10 devnull than once per second.
99 cfa37a7b 2004-04-10 devnull Calling
100 cfa37a7b 2004-04-10 devnull .IP
101 cfa37a7b 2004-04-10 devnull .L
102 cfa37a7b 2004-04-10 devnull srand(1)
103 cfa37a7b 2004-04-10 devnull .LP
104 cfa37a7b 2004-04-10 devnull will initialize the generators to their
105 cfa37a7b 2004-04-10 devnull starting state.
106 cfa37a7b 2004-04-10 devnull .PP
107 cfa37a7b 2004-04-10 devnull .I Truerand
108 cfa37a7b 2004-04-10 devnull returns a random unsigned long read from
109 cfa37a7b 2004-04-10 devnull .BR /dev/random .
110 cfa37a7b 2004-04-10 devnull Due to the nature of
111 cfa37a7b 2004-04-10 devnull .BR /dev/random ,
112 cfa37a7b 2004-04-10 devnull truerand can only return a few hundred bits a
113 cfa37a7b 2004-04-10 devnull second.
114 cfa37a7b 2004-04-10 devnull .PP
115 cfa37a7b 2004-04-10 devnull .I Ntruerand
116 cfa37a7b 2004-04-10 devnull returns a uniform random integer
117 cfa37a7b 2004-04-10 devnull .IR x ,
118 cfa37a7b 2004-04-10 devnull .RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
119 cfa37a7b 2004-04-10 devnull .PP
120 cfa37a7b 2004-04-10 devnull .I Genrandom
121 cfa37a7b 2004-04-10 devnull fills a buffer with bytes from the X9.17 pseudo-random
122 cfa37a7b 2004-04-10 devnull number generator. The X9.17 generator is seeded by 24
123 cfa37a7b 2004-04-10 devnull truly random bytes read from
124 cfa37a7b 2004-04-10 devnull .BR /dev/random .
125 cfa37a7b 2004-04-10 devnull .PP
126 cfa37a7b 2004-04-10 devnull .I Prng
127 cfa37a7b 2004-04-10 devnull uses the native
128 d32deab1 2020-08-16 rsc .MR rand (3)
129 cfa37a7b 2004-04-10 devnull pseudo-random number generator to fill the buffer. Used with
130 cfa37a7b 2004-04-10 devnull .IR srand ,
131 cfa37a7b 2004-04-10 devnull this function can produce a reproducible stream of pseudo random
132 cfa37a7b 2004-04-10 devnull numbers useful in testing.
133 cfa37a7b 2004-04-10 devnull .PP
134 cfa37a7b 2004-04-10 devnull Both
135 cfa37a7b 2004-04-10 devnull .I genrandom
136 cfa37a7b 2004-04-10 devnull and
137 cfa37a7b 2004-04-10 devnull .I prng
138 cfa37a7b 2004-04-10 devnull may be passed to
139 cfa37a7b 2004-04-10 devnull .I mprand
140 cfa37a7b 2004-04-10 devnull (see
141 d32deab1 2020-08-16 rsc .MR mp (3) ).
142 cfa37a7b 2004-04-10 devnull .PP
143 cfa37a7b 2004-04-10 devnull .I Fastrand
144 cfa37a7b 2004-04-10 devnull uses
145 cfa37a7b 2004-04-10 devnull .I genrandom
146 cfa37a7b 2004-04-10 devnull to return a uniform
147 cfa37a7b 2004-04-10 devnull .B "unsigned long
148 cfa37a7b 2004-04-10 devnull .IR x ,
149 cfa37a7b 2004-04-10 devnull .RI 0≤ x < 2\u\s732\s10\d-1.
150 cfa37a7b 2004-04-10 devnull .PP
151 cfa37a7b 2004-04-10 devnull .I Nfastrand
152 cfa37a7b 2004-04-10 devnull uses
153 cfa37a7b 2004-04-10 devnull .I genrandom
154 cfa37a7b 2004-04-10 devnull to return a uniform
155 cfa37a7b 2004-04-10 devnull .B "unsigned long
156 cfa37a7b 2004-04-10 devnull .IR x ,
157 cfa37a7b 2004-04-10 devnull .RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
158 cfa37a7b 2004-04-10 devnull .SH SOURCE
159 c8b6342d 2005-01-13 devnull .B \*9/src/lib9
160 cfa37a7b 2004-04-10 devnull .br
161 c8b6342d 2005-01-13 devnull .B \*9/src/libsec/port
162 cfa37a7b 2004-04-10 devnull .SH "SEE ALSO
163 058b0118 2005-01-03 devnull .\" .IR cons (3),
164 d32deab1 2020-08-16 rsc .MR mp (3)
165 cfa37a7b 2004-04-10 devnull .SH BUGS
166 cfa37a7b 2004-04-10 devnull .I Truerand
167 cfa37a7b 2004-04-10 devnull and
168 cfa37a7b 2004-04-10 devnull .I ntruerand
169 cfa37a7b 2004-04-10 devnull maintain a static file descriptor.
170 c8b6342d 2005-01-13 devnull .PP
171 c8b6342d 2005-01-13 devnull To avoid name conflicts with the underlying system,
172 c8b6342d 2005-01-13 devnull .IR rand ,
173 c8b6342d 2005-01-13 devnull .IR lrand ,
174 c8b6342d 2005-01-13 devnull .IR frand ,
175 c8b6342d 2005-01-13 devnull .IR nrand ,
176 c8b6342d 2005-01-13 devnull .IR lnrand ,
177 c8b6342d 2005-01-13 devnull and
178 c8b6342d 2005-01-13 devnull .I srand
179 c8b6342d 2005-01-13 devnull are preprocessor macros defined as
180 c8b6342d 2005-01-13 devnull .IR p9rand ,
181 c8b6342d 2005-01-13 devnull .IR p9lrand ,
182 c8b6342d 2005-01-13 devnull and so on;
183 c8b6342d 2005-01-13 devnull see
184 d32deab1 2020-08-16 rsc .MR intro (3) .
185 4b12db11 2005-03-18 devnull .ie \n(HT .ds HT "
186 4b12db11 2005-03-18 devnull .el .ds HT " (see HTML-formatted man page for link)
187 4b12db11 2005-03-18 devnull .PP
188 4b12db11 2005-03-18 devnull Some versions of SunOS do not ship with
189 4b12db11 2005-03-18 devnull .B /dev/random
190 4b12db11 2005-03-18 devnull installed.
191 4b12db11 2005-03-18 devnull You may have to download a
192 4b12db11 2005-03-18 devnull .HR "http://sunsolve.sun.com/search/document.do?assetkey=1-25-27606-1" "patch from Sun\*(HT"
193 4b12db11 2005-03-18 devnull to add it to your system.