#random #lcg #rand #mcg #unsigned-integer #no-std

no-std lcg69069

LCG69069 / MTH$RANDOM Pseudorandom linear congruential generator

3 releases

0.9.2 Aug 10, 2024
0.9.1 Aug 4, 2024
0.9.0 Aug 3, 2024

#635 in Algorithms

Download history 12/week @ 2024-08-14 20/week @ 2024-09-11 19/week @ 2024-09-18 17/week @ 2024-09-25 2/week @ 2024-10-02 1/week @ 2024-10-09 1/week @ 2024-10-16

111 downloads per month

Unlicense OR CC0-1.0

17KB
183 lines

LCG69069

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

LCG69069 is Pseudo random Linear congruential generator (LCG) that uses multiplier parameter 69069.

This parameter is proposed by George Marsaglia as a "candidate for the best of all multipliers":

I nominate 69069 = 3 * 7 * 11 * 13 * 23. This palindromically convoluted multiplier is easy to remember and has a nearly cubic lattice for moduli 2^32, 2^35, 2^36.

LCG69069 uses coeficients: multiplier a = 69096, increment c = 1 and modulus m = 2^32.

It can be implemented very quickly on 32-bit hardware in just 2 operations: wrapping multiplication by a and wrapping addition of c. By using 32-bit registers value is automaticaly truncated to correct range; modulus operation is not needed.

Generated values are full 32 bit unsigned integers range with period 2^32.

MTH$RANDOM

LCG69069 is used in the VAX VMS Math library as function MTH$RANDOM and is often known as VAX RANDOM. It is also part of a combined Generator called SUPER-DUPER.

MCG69069

Multiplicative congruential pseudo-random number generator. Its special case of LCG with coeficient c zero. On 32-bit hardware this generator is implemented by single wrapping multiplication operation. This variant is suitable for generating random noise on GPU, see spectral test bellow.

Generated values are full 32 bit unsigned integers range with period 2^30. This is limitation of MCG generators with 2^N modulus, they have /4 period of LCG. LCG generators always perform better than corresponding MCG variants.

References

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

LCG69069 / VAX MTH$RANDOM

https://oeis.org/A096552

MCG69069

https://oeis.org/A096551

MCG Spectral test

modulus 2d 3d 4d 5d 6d 7d 8d
2^32 0.4625 0.3131 0.4572 0.5529 0.3767 0.4967 0.6852
2^35 0.6935 0.8595 0.6347 0.7000 0.2664 0.3690 0.5284
2^36 0.4904 0.6822 0.7760 0.6094 0.4746 0.3342 0.4845

The LCG version yields better spectral test results.

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

No runtime deps