### 5 releases

0.9.4 | Aug 10, 2024 |
---|---|

0.9.3 | Aug 4, 2024 |

0.9.2 | Aug 3, 2024 |

0.9.1 | Aug 3, 2024 |

0.9.0 | Aug 3, 2024 |

#**1600** in Algorithms

**21** downloads per month

**Unlicense OR CC0-1.0**

14KB

195 lines

# RANDU

RANDU is Pseudorandom multiplicative congruential generator (MCG). This generator was first introduced in the early 1960s; its use soon became widespread during 1960's and 1970's. Its part of the IBM Scientific Subroutine Library for IBM System/360 computers.

RANDU uses MCG coeficients *multiplier a* = 65539 ( 2^16 + 3 ) and *modulus m* = 2^31 and *constant c* = 0.
It can be implemented
very quickly on 32-bit hardware in just 2 operations: wrapping multiplication by *a* and bit
masking of result using AND *0x7fffffff*.

Generated values are positive 31 bit integers. Generator period is 2^29. Lower bits have low randomness and should not be used separately. Problem with lower bits randomness and not achieving full period is common for all congruential generators with power of 2 modulus.

RANDU fails the spectral test for dimensions greater than 2. RANDU produces very strong banding when used in 3 dimensions. All points in 3d space fall in 15 two-dimensional planes. This effect can be used in GPU programming for visual effects and take advantage of compute simplicity.

### References

https://en.wikipedia.org/wiki/RANDU

https://en.wikipedia.org/wiki/Linear_congruential_generator

## Spectral test

2d | 3d | 4d | 5d | 6d | 7d | 8d |
---|---|---|---|---|---|---|

0.93 | 0.012 | 0.059 | 0.16 | 0.29 | 0.45 | 0.62 |

Values 0.75 and higher are commonly considered as passing of
the spectral test. While this generator failing higher dimensions
it is a *very strong* in generating 2d data.

## License

This is free and unencumbered software released into the public domain.