1 cfa37a7b 2004-04-10 devnull .TH RAND 3
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>
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
9 cfa37a7b 2004-04-10 devnull .ta \w'\fLdouble 'u
11 cfa37a7b 2004-04-10 devnull int rand(void)
14 cfa37a7b 2004-04-10 devnull long lrand(void)
17 cfa37a7b 2004-04-10 devnull double frand(void)
20 cfa37a7b 2004-04-10 devnull int nrand(int val)
23 cfa37a7b 2004-04-10 devnull long lnrand(long val)
26 cfa37a7b 2004-04-10 devnull void srand(long seed)
29 cfa37a7b 2004-04-10 devnull ulong truerand(void)
32 cfa37a7b 2004-04-10 devnull ulong ntruerand(ulong val)
34 cfa37a7b 2004-04-10 devnull .B #include <mp.h>
36 cfa37a7b 2004-04-10 devnull .B #include <libsec.h>
39 cfa37a7b 2004-04-10 devnull void genrandom(uchar *buf, int nbytes)
42 cfa37a7b 2004-04-10 devnull void prng(uchar *buf, int nbytes)
45 cfa37a7b 2004-04-10 devnull ulong fastrand(void)
48 cfa37a7b 2004-04-10 devnull ulong nfastrand(ulong val)
49 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
51 cfa37a7b 2004-04-10 devnull returns a uniform pseudo-random
54 cfa37a7b 2004-04-10 devnull .RI 0≤ x <2\u\s715\s10\d.
57 cfa37a7b 2004-04-10 devnull returns a uniform
60 cfa37a7b 2004-04-10 devnull .RI 0≤ x <2\u\s731\s10\d.
63 cfa37a7b 2004-04-10 devnull returns a uniform
64 cfa37a7b 2004-04-10 devnull .B double
66 cfa37a7b 2004-04-10 devnull .RI 0.0≤ x <1.0,
67 cfa37a7b 2004-04-10 devnull This function calls
69 cfa37a7b 2004-04-10 devnull twice to generate a number with as many as 62 significant bits of mantissa.
72 cfa37a7b 2004-04-10 devnull returns a uniform integer
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 .
79 cfa37a7b 2004-04-10 devnull The algorithm is additive feedback with:
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
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).
89 cfa37a7b 2004-04-10 devnull The generators are initialized by calling
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,
95 cfa37a7b 2004-04-10 devnull srand(time(0))
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.
102 cfa37a7b 2004-04-10 devnull srand(1)
104 cfa37a7b 2004-04-10 devnull will initialize the generators to their
105 cfa37a7b 2004-04-10 devnull starting state.
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
115 cfa37a7b 2004-04-10 devnull .I Ntruerand
116 cfa37a7b 2004-04-10 devnull returns a uniform random integer
118 cfa37a7b 2004-04-10 devnull .RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
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 .
127 cfa37a7b 2004-04-10 devnull uses the native
128 bf8a59fa 2004-04-11 devnull .IR 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.
135 cfa37a7b 2004-04-10 devnull .I genrandom
138 cfa37a7b 2004-04-10 devnull may be passed to
139 cfa37a7b 2004-04-10 devnull .I mprand
141 bf8a59fa 2004-04-11 devnull .IR mp (3)).
143 cfa37a7b 2004-04-10 devnull .I Fastrand
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
149 cfa37a7b 2004-04-10 devnull .RI 0≤ x < 2\u\s732\s10\d-1.
151 cfa37a7b 2004-04-10 devnull .I Nfastrand
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
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
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 058b0118 2005-01-03 devnull .IR mp (3)
165 cfa37a7b 2004-04-10 devnull .SH BUGS
166 cfa37a7b 2004-04-10 devnull .I Truerand
168 cfa37a7b 2004-04-10 devnull .I ntruerand
169 cfa37a7b 2004-04-10 devnull maintain a static file descriptor.
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 ,
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;
184 c8b6342d 2005-01-13 devnull .IR 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)
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.