(****************************************************************)
(*                                                              *)
(*         Gardens Point Modula-2 Library Definition            *)
(*                                                              *)
(*                                                              *)
(*     (c) Copyright 1996 Faculty of Information Technology     *)
(*              Queensland University of Technology             *)
(*                                                              *)
(*     Permission is granted to use, copy and change this       *)
(*     program as long as the copyright message is left intact  *)
(*                                                              *)
(****************************************************************)

(* !LIBRARY! *) DEFINITION MODULE Random;
(*
  Random number generator.
  Uses the 'Minimal standard random number generator' described by
  Park & Miller, CACM 31,10,Oct 88 p1192. The code has been checked
  for the 10001st random as specified in Park & Miller p1195.

  This version returns a REAL randomly distributed in the closed range
  [0.0,1.0], and will be correct if the real mantissa is 46 bits
  or larger (including sign bit). The sequence is guaranteed to produce
  all values of the form n/m for n = 0 to m, where m is 2147483646
  (=2**31-2), before cycling.
*)

PROCEDURE InitRandom (seed : REAL);
(* Initialise the random number generator with the given seed.		*)
(* The seed should be in the range [1.0,2147483646.0] - values outside	*)
(* this range are clamped to the extreme values.			*)
(* If InitRandom is not called, the system clock is used to initialise	*)
(* the sequence; thus InitRandom must be called to create a		*)
(* reproducible sequence.						*)
(* InitRandom may be called as often as needed.				*)

PROCEDURE Random() : REAL;
(* Return the next pseudo-random number in the closed range [0.0,1.0]	*)

END Random.