Wichmann–Hill is a
pseudorandom number generator
A pseudorandom number generator (PRNG), also known as a deterministic random bit generator (DRBG), is an algorithm for generating a sequence of numbers whose properties approximate the properties of sequences of random number generation, random n ...
proposed in 1982 by
Brian Wichmann and David Hill. It consists of three
linear congruential generators with different
prime moduli, each of which is used to produce a
uniformly distributed number between 0 and 1. These are summed, modulo 1, to produce the result.
Summing three generators produces a pseudorandom sequence with cycle exceeding . Specifically, the moduli are 30269, 30307 and 30323, producing periods of 30268, 30306 and 30322. The overall period is the
least common multiple of these: 30268×30306×30322/4 = . This has been confirmed by a
brute-force search
In computer science, brute-force search or exhaustive search, also known as generate and test, is a very general problem-solving technique and algorithmic paradigm that consists of Iteration#Computing, systematically checking all possible candida ...
.
Implementation
The following
pseudocode is for implementation on machines capable of integer arithmetic up to :
, s1, s2, s3= function(''s1'', ''s2'', ''s3'') is
''// s1, s2, s3 should be random from 1 to 30,000. Use clock if available.''
''s1'' := mod(171 × ''s1'', 30269)
''s2'' := mod(172 × ''s2'', 30307)
''s3'' := mod(170 × ''s3'', 30323)
''r'' := mod(''s1''/30269.0 + ''s2''/30307.0 + ''s3''/30323.0, 1)
For machines limited to 16-bit signed integers, the following equivalent code only uses numbers up to :
, s1, s2, s3= function(''s1'', ''s2'', ''s3'') is
''// s1, s2, s3 should be random from 1 to 30,000. Use clock if available.''
''s1'' := 171 × mod(''s1'', 177) − 2 × floor(''s1'' / 177)
''s2'' := 172 × mod(''s2'', 176) − 35 × floor(''s2'' / 176)
''s3'' := 170 × mod(''s3'', 178) − 63 × floor(''s3'' / 178)
''r'' := mod(s1/30269 + s2/30307 + s3/30323, 1)
The seed values
s1
,
s2
and
s3
must be initialized to non-zero values.
References
{{DEFAULTSORT:Wichmann-Hill
Pseudorandom number generators