Provided by: erlang-manpages_18.3-dfsg-1ubuntu3.1_all bug

NAME

       random - Pseudo random number generation

DESCRIPTION

       Random  number  generator.  The  method is attributed to B.A. Wichmann and I.D.Hill, in 'An efficient and
       portable pseudo-random number generator', Journal of Applied Statistics. AS183.  1982.  Also  Byte  March
       1987.

       The  current  algorithm  is a modification of the version attributed to Richard A O'Keefe in the standard
       Prolog library.

       Every time a random number is requested, a state is used to calculate it, and a new state  produced.  The
       state  can  either  be  implicit  (kept  in the process dictionary) or be an explicit argument and return
       value. In this implementation, the state (the type ran()) consists of a tuple of three integers.

       It should be noted that this random number  generator  is  not  cryptographically  strong.  If  a  strong
       cryptographic  random  number  generator  is  needed for example crypto:strong_rand_bytes/1 could be used
       instead.

   Note:
       The new and improved rand module should be used instead of this module.

DATA TYPES

       ran() = {integer(), integer(), integer()}

              The state.

EXPORTS

       seed() -> ran()

              Seeds random number generation with default (fixed) values in the process dictionary, and  returns
              the old state.

       seed(A1, A2, A3) -> undefined | ran()

              Types:

                 A1 = A2 = A3 = integer()

              Seeds  random number generation with integer values in the process dictionary, and returns the old
              state.

              One easy way of obtaining a unique value to seed with is to:

              random:seed(erlang:phash2([node()]),
                          erlang:monotonic_time(),
                          erlang:unique_integer())

              See   erlang:phash2/1,   node/0,   erlang:monotonic_time/0,  and    erlang:unique_integer/0)   for
              details.

       seed(SValue) -> undefined | ran()

              Types:

                 SValue = {A1, A2, A3} | integer()
                 A1 = A2 = A3 = integer()

              seed({A1, A2, A3}) is equivalent to seed(A1, A2, A3).

       seed0() -> ran()

              Returns the default state.

       uniform() -> float()

              Returns  a  random  float  uniformly  distributed  between  0.0 and 1.0, updating the state in the
              process dictionary.

       uniform(N) -> integer() >= 1

              Types:

                 N = integer() >= 1

              Given an integer N >= 1, uniform/1 returns a random integer uniformly distributed between 1 and N,
              updating the state in the process dictionary.

       uniform_s(State0) -> {float(), State1}

              Types:

                 State0 = State1 = ran()

              Given  a state, uniform_s/1returns a random float uniformly distributed between 0.0 and 1.0, and a
              new state.

       uniform_s(N, State0) -> {integer(), State1}

              Types:

                 N = integer() >= 1
                 State0 = State1 = ran()

              Given an integer N >= 1 and a state, uniform_s/2 returns a random  integer  uniformly  distributed
              between 1 and N, and a new state.

NOTE

       Some of the functions use the process dictionary variable random_seed to remember the current seed.

       If a process calls uniform/0 or uniform/1 without setting a seed first, seed/0 is called automatically.

       The implementation changed in R15. Upgrading to R15 will break applications that expect a specific output
       for a given seed. The output is still deterministic number series, but  different  compared  to  releases
       older than R15. The seed {0,0,0} will, for example, no longer produce a flawed series of only zeros.