subtract_with_carry_engine 模板定義了實現帶進位減法的亂數引擎,這是對線性同餘演算法的改進。像線性同餘演算法一樣,帶進位減法演算法釆用遞迴關係定義序列中的連續值,但是每個值 x
i 都是從序列的前兩個值 x
i-r 和 x
i-s 計算出的,並不是只由前一個值計算得出。r 和 s 分別被稱作長腳和短腳,並且都必須是正數,r 必須大於 s。生成這個序列的等式如下:△i ={x
i-r - x
i-s - c
i-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(點此檢視高清大圖
)