SML/NJ Library Manual

The Rand structure


signature RAND
structure Rand : RAND

The Rand structure implements a simple linear congruential random number generator with a uniform distribution. It is based on the one described in Paulson's book (pp. 170-171), which is derived from the article ``Random number generators: good ones are hard to find,'' by Stephen K. Park and Keith W. Miller, CACM 31 (1988), pp. 1192-1201. It also incorporates the changes suggested by Park and Miller in CACM 36 (1993), pp. 105-110. The generator has period 2(31)-1. The values returned by random and mkRandom are 31-bit words in the range [randMin,randMax]. In the current implementation, randMin is 1.0 and randMax is 2(31)-2.


type rand = Word31.word
val randMin : rand
val randMax : rand
val random : rand -> rand
val mkRandom : rand -> unit -> rand
val norm : rand -> real
val range : (int * int) -> rand -> int


type rand

specify the minimum and maximum values returned by random and mkRandom.

random r
returns a random number in the range [randMin,randMax] using the seed r. Iteratively using the value returned by random as the next seed to random will produce a sequence of pseudo-random numbers.

mkRandom r
returns a stateful function generating a sequence of random numbers in the range [randMin,randMax], starting from the seed r.

val norm
Uniformly maps the range [randMin,randMax] to the range (0.0,1.0). This can be used in combination with random or mkRandom to generate normalized real-valued random numbers.

range (i, j)
returns a function mapping the range [randMin,randMax] uniformly to the range [i,j]. This can be used in combination with random or mkRandom to generate random numbers in a given integer range. This raises the exception Fail if j < i.

See Also


[ Top | Parent | Contents | Index | Root ]

Last Modified May 6, 1998
Comments to John Reppy
Copyright © 1998 Bell Labs, Lucent Technologies