我已MT19937
在测试工具中使用以生成统一(无符号)32 位 [0,- 1] 值,基于原始作者的mt19937.c实现,以生成(基本上取之不尽的)统计随机位八位字节流的供应。这代替了 CSPRNG,这对于这些特定测试不是必需的。但是,我最近一直在考虑WELL
PRNG——不是因为统计特性本身(两者似乎都足以满足我的需求)——但它们似乎暗示了更有效的实现。
我缺乏学术论文的数学背景,尽管我至少可以遵循“扭曲”矩阵和前者的回火变换。然而,函数作者提供的大部分代码WELL-n
似乎都集中在浮点生成上,并带有一些神奇的浮点常量(例如,2.32830643653869628906e-10
)。是否可以从WELL
代码中省略步骤以提供统一的 32 位分布?或者该算法是专门为浮点分布设计/偏向的?
或者我认为WELL
会在满足我的要求的同时为“批量”uint32 向量生成带来性能提升的想法是错误的?