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 在 算法
366 每月下载量
用于 walkup
18KB
284 行
MINSTD
这种乘性同余伪随机数生成器被称为“最小标准生成器”或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
MINSTD0 / 1988版本
乘数16807
频谱测试
乘数 | 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.0或Unlicense的条款下使用。