RAND(2) RAND(2) NAME rand, lrand, frand, nrand, lnrand, srand, truerand, n_truerand, fastrand - 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) int n_truerand(int val) ulong fastrand(void) 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 2^31 giving a period of 2^30 × (2^607 - 1). The generators are initialized by calling srand with what- ever you like as argument. To get a different starting value each time, srand(time(0)) Page 1 Plan 9 (printed 4/25/24) RAND(2) RAND(2) 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. N_truerand returns a uniform integer x, 0≤x<val. Fastrand is a pseudo random number generator which is seeded and periodically scrambled using truerand. It is approxi- mately 1000 times faster than truerand and is intended for security software that requires a larger stream of unguess- able data. SOURCE /sys/src/libc/port/rand.c /sys/src/libc/9sys/truerand.c SEE ALSO cons(3) Page 2 Plan 9 (printed 4/25/24)