DEFINITION MODULE RandGen0;
(*******************************************************************
Module RandGen0 (Version 1.0)
Copyright (c) 1993-2006 by Andreas Fischlin and ETH Zurich.
Purpose Simple random number generators often used in
stochastic simulations.
Remarks This module is best used in connection with
module RandGen.
Programming
o Design
Andreas Fischlin 03/12/1993
o Implementation
Andreas Fischlin 03/12/1993
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 03/12/1993 AF
*******************************************************************)
PROCEDURE J(): INTEGER;
PROCEDURE Jp(min,max: INTEGER): INTEGER;
(*
Return in the range [min..max] uniformly distributed integer
variates. For J the range [min..max] has to be defined by
procedure SetJPar. Default: [min..max] = [0..1].
*)
PROCEDURE SetJPar( min,max: INTEGER);
PROCEDURE GetJPar(VAR min,max: INTEGER);
(*
Setting and retrieval of the range parameters [min..max] used
by the integer random number generator J.
*)
PROCEDURE R(): REAL;
PROCEDURE Rp(min,max: REAL): REAL;
(*
Return in the range [min..max] uniformly distributed real
variates. For R the range [min..max] has to be defined by
procedure SetRPar. Default: [min..max] = [0.0..1.0].
*)
PROCEDURE SetRPar( min,max: REAL);
PROCEDURE GetRPar(VAR min,max: REAL);
(*
Setting and retrieval of the range parameters [min..max] used
by the real random number generator R.
*)
PROCEDURE NegExp(): REAL;
PROCEDURE NegExpP(lambda: REAL): REAL;
(*
Sampling of negative exponentially distributed variates. For
NegExp the mean lambda has to be defined by procedure
SetNegExpPar. Default: lambda = 1, i.e. a Poisson process where
on average occurs 1 event per time unit.
*)
PROCEDURE SetNegExpPar( lambda: REAL);
PROCEDURE GetNegExpPar(VAR lambda: REAL);
(*
Setting and retrieval of the mean parameter lambda used by the
negative exponential random number generator NegExp.
*)
TYPE
URandGen = PROCEDURE(): REAL;
(* NOTE: Always call one of the following two procedures before
calling any other random number generator from this module: *)
PROCEDURE InstallU0(u0: URandGen);
(*
Allows to install the basic random number generator needed by
all generators exported by this module. The random number
generator u0 must sample uniformly distributes variates within
interval [0..1), i.e. it may generate 0.0, but must not
generate exactly 1. For instance you may install procedure U
from module RandGen contained in the auxiliary library of the
RAMSES software, which satisfies these specifications and
produces high quality pseudo-random number sequences (See also
procedure InstallU1).
*)
PROCEDURE InstallU1(u1: URandGen);
(*
Allows to install the basic random number generator needed by
all generators exported by this module. The random number
generator u1 must sample uniformly distributes variates within
interval (0..1] or (0..1), i.e. it may or may not generate 1.0,
but must not generate exactly 0. The installation of a good
generator u1 satisfying these specifications results in more
efficient variates sampling by the NegExp generator than when
installing a basic generator via procedure InstallU0. However,
the efficiency may be in conflict with the quality of the
generated pseudo-random number sequences (see also procedure
InstallU0).
*)
END RandGen0.