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)