DEFINITION MODULE Randomly;

(* procedures for getting random numbers *)
(* J. Andrea, Jun.2/92 - add NormalRandom *)
(* J. Andrea, Oct.4/91, add min and max input to RandomReal *)
(* J. Andrea, Sep.10/91, add "1 to n-1" procedure *)
(* J. Andrea, 1985 *)
(* This code may be freely used and distributed, it may not be sold. *)

EXPORT QUALIFIED
        RandomReal, NormalRandom,
        Choose_0_To_N, Choose_0_To_N_Minus_1, 
        Choose_1_To_N, Choose_1_To_N_Minus_1, 
        InputSeed, MakeSeed;


PROCEDURE RandomReal( min, max :REAL ) :REAL;
(* return a real number X, such that:  min >= X < max  *)


PROCEDURE NormalRandom( mean, sigma :REAL ) :REAL;
(* return a real number X, as a random value over a normal distribution
   given the mean and sigma *)
   

PROCEDURE Choose_0_To_N( n :CARDINAL) :CARDINAL;
(* return a cardinal A, with given N, such that:  0 >= A <= N *)


PROCEDURE Choose_0_To_N_Minus_1( n :CARDINAL) :CARDINAL;
(* return a cardinal A, with given N, such that:  0 >= A <= N-1 *)


PROCEDURE Choose_1_To_N( n :CARDINAL) :CARDINAL;
(* return a cardinal A, with given N, such that:  1 >= A <= N *)


PROCEDURE Choose_1_To_N_Minus_1( n :CARDINAL) :CARDINAL;
(* return a cardinal A, with given N, such that:  1 >= A <= N-1 *)


PROCEDURE InputSeed( seed :INTEGER );
(* Use this procedure to start the random sequence with you own seed.
   The seed should be a large odd value.
   Using the same seed will result in the same sequence. *)
   

PROCEDURE MakeSeed;
(* create a seed from the current time of day. *)
(* This procedure is called as the startup for this module and so
   there is generally no need to call this procedure *)


END Randomly.
