NAME
rand, lrand, frand, nrand, lnrand, srand, truerand, ntruerand,
genrandom, prng, fastrand, nfastrand – random number generators |
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) 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:
The generators are initialized by calling srand with whatever
you like as argument. To get a different starting value each time,
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(2) 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(2)). 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
/sys/src/libc/port/*rand.c /sys/src/libc/9sys/truerand.c /sys/src/libsec/port/genrandom.c /sys/src/libsec/port/prng.c /sys/src/libsec/port/*fastrand.c |
SEE ALSO
cons(3), mp(2) |
BUGS
Truerand and ntruerand maintain a static file descriptor. |