#rand #mcg #no-std #gpgpu

无 std randu

RANDU MCG65539 是 IBM System/360 随机数生成器

5 个版本

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

#1519算法

Download history 234/week @ 2024-08-03 100/week @ 2024-08-10

每月下载量334

Unlicense OR CC0-1.0

14KB
195

RANDU

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

RANDU 是伪随机乘法 线性同余生成器 (MCG)。这个生成器最早在20世纪60年代初提出,很快在20世纪60年代和70年代得到广泛应用。它是IBM Scientific Subroutine Library for IBM System/360 的一部分。

RANDU 使用 MCG 系数 乘数 a = 65539 (2^16 + 3) 和 模数 m = 2^31,以及 常数 c = 0。它可以在32位硬件上非常快速地实现,只需要两个操作:将乘数乘以 a,然后用 AND 操作和 0x7fffffff 对结果进行位掩码。

生成的值是正31位整数。生成器的周期为 2^29。低位的随机性较低,不应单独使用。所有基于2的模数的同余生成器都存在低位随机性低和未实现完整周期的问题。

RANDU 在维数大于2时未能通过谱测试。RANDU 在3维空间中产生非常 强的带状效应,所有点都落在15个二维平面上。这种效果可以用于GPU编程中的视觉效果,并利用计算上的简化。

参考文献

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

https://oeis.org/A096555

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

2维 3维 4维 5维 6维 7维 8维
0.93 0.012 0.059 0.16 0.29 0.45 0.62

值 0.75 和以上通常被认为是通过了谱测试。虽然这个生成器在高维未能通过测试,但在生成2维数据时它非常

许可证

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

此代码可以在 CC0Unlicense 许可证下使用。

Unlicense logo

无运行时依赖项