(* -*- mode: sml -*- * $Id: random.smlnj,v 1.5 2001/07/09 00:25:28 doug Exp $ * http://www.bagley.org/~doug/shootout/ *) structure Test : sig val main : (string * string list) -> OS.Process.status end = struct val im : int = 139968; val ia : int = 3877; val ic : int = 29573; fun randloop 0 seed rand max = rand | randloop n seed rand max = let val newseed : int = (seed * ia + ic) mod im; val newrand : real = max * (Real.fromInt newseed) / (Real.fromInt im); in randloop (n-1) newseed newrand max end; fun atoi s = case Int.fromString s of SOME num => num | NONE => 0; fun main(name, args) = let val arg = hd(args @ ["1"]); val num = atoi arg; val result = randloop num 42 0.0 100.0; in print (Real.fmt (StringCvt.FIX (SOME 9)) result); print "\n"; OS.Process.success end end val _ = SMLofNJ.exportFn("random", Test.main);