Wichmann–Hill
   HOME

TheInfoList



OR:

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