RAND(2)RAND(2)
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)
unhandled troff command .sp
#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.
Ntruerand
returns a uniform random integer
x,
0≤ x < val ≤ 232-1.
Genrandom
fills a buffer with bytes from the cryptographic pseudo-random
number generator. The generator is automatically seeded by
truerand.
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.