mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-05 23:22:25 +00:00
ported RandomNumbers
This commit is contained in:
parent
fcc5f1447d
commit
bd3b90d6b6
2 changed files with 41 additions and 0 deletions
1
makefile
1
makefile
|
|
@ -212,6 +212,7 @@ stage6:
|
|||
$(VOCSTATIC) -sP ZlibReaders.Mod
|
||||
$(VOCSTATIC) -sP ZlibWriters.Mod
|
||||
$(VOCSTATIC) -sP Zip.Mod
|
||||
$(VOCSTATIC) -sP RandomNumbers.Mod
|
||||
|
||||
|
||||
stage7:
|
||||
|
|
|
|||
40
src/lib/s3/RandomNumbers.Mod
Normal file
40
src/lib/s3/RandomNumbers.Mod
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
(* ETH Oberon, Copyright 2001 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
|
||||
Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
|
||||
|
||||
MODULE RandomNumbers; (** portable *)
|
||||
(* Random Number Generator, page 12 *)
|
||||
IMPORT Math := oocOakMath, Oberon := Kernel, SYSTEM;
|
||||
|
||||
VAR Z, t, d: LONGINT;
|
||||
|
||||
(** Return a uniform random number r, with 0 < r < 1. *)
|
||||
|
||||
PROCEDURE Uniform*(): REAL;
|
||||
CONST
|
||||
a = 16807; m = 2147483647;
|
||||
q = m DIV a; r = m MOD a;
|
||||
VAR g: LONGINT;
|
||||
BEGIN
|
||||
g := a*(Z MOD q) - r*(Z DIV q);
|
||||
IF g > 0 THEN Z := g ELSE Z := g + m END;
|
||||
RETURN SHORT(Z*1.0D0/m) (* must compute this in double precision, e.g. (m-1)/m *)
|
||||
END Uniform;
|
||||
|
||||
(** Return an exponentially distributed random number r. *)
|
||||
|
||||
PROCEDURE Exp*(mu: REAL): REAL;
|
||||
BEGIN
|
||||
RETURN -Math.ln(Uniform())/mu
|
||||
END Exp;
|
||||
|
||||
(** Initialize the random number seed. *)
|
||||
|
||||
PROCEDURE InitSeed*(seed: LONGINT);
|
||||
BEGIN
|
||||
Z := seed
|
||||
END InitSeed;
|
||||
|
||||
BEGIN
|
||||
Oberon.GetClock(t, d);
|
||||
Z := SYSTEM.VAL(LONGINT, SYSTEM.VAL(SET, t) / SYSTEM.VAL(SET, d))
|
||||
END RandomNumbers. (* Copyright M. Reiser, 1992 *)
|
||||
Loading…
Add table
Add a link
Reference in a new issue