C++带进位的线性同余法(subtract_with_carry_engine)生成随机数详解

  • 内容
  • 评论
  • 相关

subtract_with_carry_engine 模板定义了实现带进位减法的随机数引擎,这是对线性同余算法的改进。像线性同余算法一样,带进位减法算法釆用递归关系定义序列中的连续值,但是每个值 xi 都是从序列的前两个值 xi-r 和 xi-s 计算出的,并不是只由前一个值计算得出。r 和 s 分别被称作长脚和短脚,并且都必须是正数,r 必须大于 s。生成这个序列的等式如下:△i ={xi-r - xi-s - ci-1) mod m,其中 m 是 2n,n 是一个单词的比特个数。

c 是一个可能是 0 或 1 的“进位”,这取决于先前的状态。这个算法要求种子值 r 和进位 c 的初始值。和线性同余算法一样,带进位减法算法也对参数值的选择非常敏感。

带进位的线性同余法的实例

r 为 24、s 是 10 的 ranlux24_base 生成器类会生成 24 位整数的随机序列。r 是 12、s 是 5 的 ranlux48_base 类产生成 48 位整数的序列。




图 1(点此查看高清大图

本文标题:C++带进位的线性同余法(subtract_with_carry_engine)生成随机数详解

本文地址:http://www.hosteonscn.com/3052.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注