| RAND(3) | RAND(3)
| NAME
| rand, lrand, frand, nrand, lnrand, srand, truerand, ntruerand, fastrand, nfastrand – random number generator
SYNOPSIS
| `#include <u.h> #include <libc.h>
` `int rand(void)
` `long lrand(void)
` `double frand(void)
` `int nrand(int val)
` `long lnrand(long val)
` `void srand(long seed)
` `ulong truerand(void)
` `ulong ntruerand(ulong val) #include <mp.h> #include <libsec.h>
` `void genrandom(uchar *buf, int nbytes)
` `void prng(uchar *buf, int nbytes)
` `ulong fastrand(void)
` `ulong nfastrand(ulong val)`
DESCRIPTION
| Rand returns a uniform pseudo-random number x, 0≤x<215.
Lrand returns a uniform `long` x, 0≤x<231.
Frand returns a uniform `double` x, 0.0≤x<1.0, This function calls lrand twice to generate a number with as many as 62 significant bits of mantissa.
Nrand returns a uniform integer x, 0≤x<val. Lnrand is the same, but returns a `long`.
The algorithm is additive feedback with:
| x[n] = (x[n-273] + x[n-607]) mod 231
giving a period of 230 × (2607 – 1).
The generators are initialized by calling srand with whatever you like as argument. To get a different starting value each time,
| `srand(time(0))
`
will work as long as it is not called more often than once per second. Calling
| `srand(1)
`
will initialize the generators to their starting state.
Truerand returns a random unsigned long read from `/dev/random`. Due to the nature of `/dev/random`, truerand can only return a few hundred bits a second.
Ntruerand returns a uniform random integer x, 0≤x<val≤232-1.
Genrandom fills a buffer with bytes from the X9.17 pseudo-random number generator. The X9.17 generator is seeded by 24 truly random bytes read from `/dev/random`.
Prng uses the native rand(3) pseudo-random number generator to fill the buffer. Used with srand, this function can produce a reproducible stream of pseudo random numbers useful in testing.
Both genrandom and prng may be passed to mprand (see mp(3)).
Fastrand uses genrandom to return a uniform `unsigned long` x, 0≤x<232-1.
Nfastrand uses genrandom to return a uniform `unsigned long` x, 0≤x<val≤232-1.
SOURCE
| `/usr/local/plan9/src/lib9 /usr/local/plan9/src/libsec/port`
SEE ALSO
| mp(3)
BUGS
| Truerand and ntruerand maintain a static file descriptor.
To avoid name conflicts with the underlying system, rand, lrand, frand, nrand, lnrand, and srand are preprocessor macros defined as p9rand, p9lrand, and so on; see intro(3).
Some versions of SunOS do not ship with `/dev/random` installed. You may have to download a patch from Sun to add it to your system.