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

no-std lcg69069

LCG69069 / MTH$RANDOM 伪随机线性同余生成器

3个版本

0.9.2 2024年8月10日
0.9.1 2024年8月4日
0.9.0 2024年8月3日

453算法

Download history 175/week @ 2024-07-29 163/week @ 2024-08-05 25/week @ 2024-08-12

每月363次下载

Unlicense OR CC0-1.0

17KB
183

LCG69069

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

LCG69069是伪随机线性同余生成器 (LCG),使用乘数参数69069

此参数由George Marsaglia提出,作为“所有乘数中的最佳候选”。

我提名69069 = 3 * 7 * 11 * 13 * 23。这个回文卷积乘数易于记忆,并且对于模数2^32、2^35、2^36有近乎立方的晶格。

LCG69069使用的系数:乘数a = 69096,增量c = 1和模数m = 2^32。

它可以在32位硬件上非常快速地实现,只需要2个操作:通过a的环绕乘法和通过c的环绕加法。通过使用32位寄存器,值自动截断到正确的范围;不需要模运算。

生成的值是完整的32位无符号整数范围,周期为2^32。

MTH$RANDOM

LCG69069被用于VAX VMS Math库中的函数MTH$RANDOM,通常称为VAX RANDOM。它也是组合生成器SUPER-DUPER的一部分。

MCG69069

乘法同余伪随机数生成器。它是LCG的特殊情况,系数c为零。在32位硬件上,此生成器通过单环绕乘法操作实现。此变体适用于在GPU上生成随机噪声,见下方的光谱测试。

生成的值是完整的32位无符号整数范围,周期为2^30。这是2^N模数的MCG生成器的限制,它们有LCG的/4周期。LCG生成器始终优于相应的MCG变体。

参考资料

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

LCG69069 / VAX MTH$RANDOM

https://oeis.org/A096552

MCG69069

https://oeis.org/A096551

MCG光谱测试

模数 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

LCG版本产生更好的光谱测试结果。

许可证

这是一款免费且不受限制的软件,已释放到公共领域。

此代码可以在CC0Unlicense的条款下使用。

Unlicense logo

无运行时依赖