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

NAME

       rand - Pseudo random number generation

DESCRIPTION

       Random number generator.

       The  module  contains  several  different  algorithms and can be extended with more in the
       future.  The  current  uniform  distribution  algorithms  uses  the   scrambled   Xorshift
       algorithms  by  Sebastiano  Vigna and the normal distribution algorithm uses the  Ziggurat
       Method by Marsaglia and Tsang.

       The implemented algorithms are:

         exsplus:
           Xorshift116+, 58 bits precision and period of 2^116-1.

         exs64:
           Xorshift64*, 64 bits precision and a period of 2^64-1.

         exs1024:
           Xorshift1024*, 64 bits precision and a period of 2^1024-1.

       The current default algorithm is exsplus. The default may change in future. If a  specific
       algorithm is required make sure to always use seed/1 to initialize the state.

       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 or it can be an explicit  argument  and  return
       value.

       The  functions  with  implicit  state  use  the  process  dictionary variable rand_seed to
       remember the current state.

       If a process calls uniform/0 or uniform/1 without setting a seed first, seed/1  is  called
       automatically with the default algorithm and creates a non-constant seed.

       The functions with explicit state never use the process dictionary.

       Examples:

             %% Simple usage. Creates and seeds the default algorithm
             %% with a non-constant seed if not already done.
             R0 = rand:uniform(),
             R1 = rand:uniform(),

             %% Use a given algorithm.
             _ = rand:seed(exs1024),
             R2 = rand:uniform(),

             %% Use a given algorithm with a constant seed.
             _ = rand:seed(exs1024, {123, 123534, 345345}),
             R3 = rand:uniform(),

             %% Use the functional api with non-constant seed.
             S0 = rand:seed_s(exsplus),
             {R4, S1} = rand:uniform_s(S0),

             %% Create a standard normal deviate.
             {SND0, S2} = rand:normal_s(S1),

   Note:
       This  random  number  generator is not cryptographically strong. If a strong cryptographic
       random number generator is needed, use one of functions in the crypto module, for  example
       crypto:strong_rand_bytes/1.

DATA TYPES

       alg() = exs64 | exsplus | exs1024

       state()

              Algorithm dependent state.

       export_state()

              Algorithm dependent state which can be printed or saved to file.

EXPORTS

       seed(AlgOrExpState :: alg() | export_state()) -> state()

              Seeds  random number generation with the given algorithm and time dependent data if
              AlgOrExpState is an algorithm.

              Otherwise recreates the exported seed in the process dictionary,  and  returns  the
              state. See also: export_seed/0.

       seed_s(AlgOrExpState :: alg() | export_state()) -> state()

              Seeds  random number generation with the given algorithm and time dependent data if
              AlgOrExpState is an algorithm.

              Otherwise  recreates  the  exported  seed  and  returns  the   state.   See   also:
              export_seed/0.

       seed(Alg :: alg(), S0 :: {integer(), integer(), integer()}) ->
               state()

              Seeds random number generation with the given algorithm and integers in the process
              dictionary and returns the state.

       seed_s(Alg :: alg(), S0 :: {integer(), integer(), integer()}) ->
                 state()

              Seeds random number generation with the given algorithm and  integers  and  returns
              the state.

       export_seed() -> undefined | export_state()

              Returns the random number state in an external format. To be used with seed/1.

       export_seed_s(X1 :: state()) -> export_state()

              Returns  the  random  number generator state in an external format. To be used with
              seed/1.

       uniform() -> X :: float()

              Returns a random float uniformly distributed in the value range 0.0 < X < 1.0   and
              updates the state in the process dictionary.

       uniform_s(State :: state()) -> {X :: float(), NewS :: state()}

              Given  a  state,  uniform_s/1  returns  a random float uniformly distributed in the
              value range 0.0 < X < 1.0 and a new state.

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

              Given an integer N >= 1, uniform/1 returns a random integer  uniformly  distributed
              in the value range 1 <= X <= N and updates the state in the process dictionary.

       uniform_s(N :: integer() >= 1, State :: state()) ->
                    {X :: integer() >= 1, NewS :: state()}

              Given an integer N >= 1 and a state, uniform_s/2 returns a random integer uniformly
              distributed in the value range 1 <= X <= N and a new state.

       normal() -> float()

              Returns a standard normal deviate float (that is, the mean is 0  and  the  standard
              deviation is 1) and updates the state in the process dictionary.

       normal_s(State0 :: state()) -> {float(), NewS :: state()}

              Given  a  state,  normal_s/1  returns a standard normal deviate float (that is, the
              mean is 0 and the standard deviation is 1) and a new state.