randu

Crates.iorandu
lib.rsrandu
version0.9.4
sourcesrc
created_at2024-08-03 07:02:44.086228
updated_at2024-08-10 12:29:19.831132
descriptionRANDU MCG65539 is IBM System/360 random number generator
homepagehttps://gitlab.com/hsn10/randu
repositoryhttps://gitlab.com/hsn10/randu.git
max_upload_size
id1324154
size15,008
Radim Kolar (hsn10)

documentation

https://docs.rs/randu

README

RANDU

Version License MSRV no-std ready Safe Rust dependency status Documentation Downloads

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://oeis.org/A096555

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.

This code can be used under terms of CC0 or the Unlicense.

Unlicense logo

Commit count: 0

cargo fmt