Top Qs
Timeline
Chat
Perspective

Wichmann–Hill

Mathematical algorithm From Wikipedia, the free encyclopedia

Remove ads

Wichmann–Hill is a pseudorandom number generator proposed in 1982 by Brian Wichmann and David Hill.[1] 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.[2]

Summing three generators produces a pseudorandom sequence with cycle exceeding 6.95×1012.[3] 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 = 6953607871644. This has been confirmed by a brute-force search.[4][5]

Remove ads

Implementation

The following pseudocode is for implementation on machines capable of integer arithmetic up to 5,212,632:

[r, 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 30,323:

[r, 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.

Remove ads

References

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads