#rand #mcg #no-std

no-std minstd

MINSTD最小标准随机数生成器

5个版本

0.9.4 2024年8月8日
0.9.3 2024年8月8日
0.9.2 2024年8月8日
0.9.1 2024年8月5日
0.9.0 2024年8月5日

654算法

Download history 366/week @ 2024-08-05

366 每月下载量
用于 walkup

Unlicense OR CC0-1.0

18KB
284

MINSTD

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

这种乘性同余伪随机数生成器被称为“最小标准生成器”或MCG16807。首次在1988年Park和Miller的论文《随机数生成器:好数生成器很难找到》中描述。

生成器 模数m = 2^31-1是梅森素数M31。《乘数a = 7^5 = 16807》首次由Lewis、Goodman和Miller于1969年提出。

这种形式的乘性同余生成器归功于D. H. Lehmer,并被称为Lehmer随机数生成器。首次由Hutchinson描述,并由Downham和Roberts独立描述。

生成器后来被Marsaglia和Sullivan(1993年)批评。虽然它今天仍在使用(特别是在CarbonLib、Matlab中的mcg16807、FreeBSD 5中的rand()和C++11中的函数minstd_rand0)中),从1990年7月起,Park、Miller和Stockmeyer“正式”推荐a = 48271乘数。

更新的版本在频谱测试中表现良好,高达第六维。

极简代码

此代码没有依赖项,不使用标准库。可用于嵌入式WebAssembly环境。

MINSTD / 1990版本

乘数48271

https://oeis.org/A221556

MINSTD0 / 1988版本

乘数16807

https://oeis.org/A096550

频谱测试

乘数 2d 3d 4d 5d 6d 7d 8d
16807 0.3375 0.4412 0.5752 0.7361 0.6454 0.5711 0.6096
48271 0.8960 0.8269 0.8506 0.7332 0.8078 0.5865 0.4364
69621 0.7836 0.9205 0.8516 0.7318 0.7667 0.6628 0.7845

值0.75或更高被认为是通过频谱测试的足够条件。

许可

这是免费且不受限制的软件,已发布到公共领域。

此代码可以在CC0-1.0Unlicense的条款下使用。

Unlicense logo

无运行时依赖