home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / languages / obrn-a_1.5_lib.lha / oberon-a / source2.lha / Source / ProgInOberon / RandomNumbers.mod < prev   
Encoding:
Text File  |  1995-01-26  |  1.3 KB  |  63 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: RandomNumbers.mod $
  4.   Description: Random number generator from "Programming In Oberon"
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 1.9 $
  8.       $Author: fjc $
  9.         $Date: 1995/01/26 00:48:12 $
  10.  
  11.   Copyright © 1990-1993, ETH Zuerich
  12.   Copyright © 1994, Frank Copeland.
  13.   This file is part of the Oberon-A Library.
  14.   See Oberon-A.doc for conditions of use and distribution.
  15.  
  16. *************************************************************************)
  17.  
  18. <* MAIN- *> <*$ LongVars+ *>
  19.  
  20. MODULE RandomNumbers;
  21.  
  22. IMPORT d := Dos;
  23.  
  24. VAR z : LONGINT;
  25.  
  26. (*------------------------------------*)
  27. PROCEDURE Uniform * () : REAL;
  28.  
  29.   CONST a = 16807; m = 2147483647; q = m DIV a; r = m MOD a;
  30.  
  31.   VAR gamma : LONGINT;
  32.  
  33. BEGIN (* Uniform *)
  34.   gamma := a * (z MOD q) - r * (z DIV q);
  35.   IF gamma > 0 THEN z := gamma
  36.   ELSE z := gamma + m
  37.   END;
  38.   RETURN z * (1.0 / m)
  39. END Uniform;
  40.  
  41. (*------------------------------------*)
  42. PROCEDURE InitSeed * (seed : LONGINT);
  43.  
  44. BEGIN (* InitSeed *)
  45.   z := seed
  46. END InitSeed;
  47.  
  48. (*------------------------------------*)
  49. PROCEDURE TimeSeed * ();
  50.  
  51.   VAR ds : d.Date; x : REAL;
  52.  
  53. BEGIN (* TimeSeed *)
  54.   d.DateStamp (ds);
  55.   z := (ds.minute * (60 * d.ticksPerSecond)) + ds.tick;
  56.   x := Uniform()
  57. END TimeSeed;
  58.  
  59. BEGIN
  60.   z := 314159
  61. END RandomNumbers.
  62.  
  63.