(* The Great Win32 Language Shootout http://dada.perl.it/shootout/
contributed by Isaac Gouy (Modula2 novice)
To build: xc =m random
To run: random 900000
*)
MODULE Random;
<* procinline + *>
<* ioverflow - *>
<* alignment="8" *>
(* Prefer unqualified procedures *)
FROM LanguageShootout IMPORT N;
FROM STextIO IMPORT WriteLn;
FROM SLongIO IMPORT WriteFixed;
CONST
IM = 139968;
IA = 3877;
IC = 29573;
VAR
n, last: INTEGER;
result: LONGREAL;
PROCEDURE Gen_Random(max: LONGREAL): LONGREAL;
BEGIN
last := (last*IA + IC) REM IM;
RETURN max * LFLOAT(last) / LFLOAT(IM);
END Gen_Random;
BEGIN
n := N();
last := 42;
WHILE n > 0 DO
DEC(n);
result := Gen_Random(100.0);
END;
WriteFixed(result,9,1); WriteLn;
END Random.