伪随机数生成器:互补乘加、基于计数器及组合生成器的深入解析
在随机数生成领域,有多种类型的生成器,它们各有特点和优势。本文将详细介绍互补乘加生成器(CMWC)、基于计数器的生成器以及组合生成器,包括它们的原理、代码实现和性能特点。
1. 互补乘加生成器(CMWC)
CMWC 生成器由 Marsaglia 提出,实现简单且周期极长,远超 Mersenne Twister 生成器。
1.1 代码实现
以下是 CMWC 生成器的代码:
#define R 4096
#define A 18782ULL
uint32_t Q[R];
uint32_t c=362436; // c < 809430660
uint32_t CMWC(void) {
static uint32_t i=R-1;
uint64_t t;
uint32_t x, m=0xFFFFFFFE;
i = (i+1) & (R-1);
t = A*Q[i] + c;
c = t >> 32;
x = t+c;
if (x < c) { x++; c++; }
Q[i] = m-x;
return Q[i];
}
在调用该生成器之前,需要对状态 Q 进行初始化。可以使用 xorshift 快速初始化状态:
void CMWC_init(void) {
int i;
超级会员免费看
订阅专栏 解锁全文
1534

被折叠的 条评论
为什么被折叠?



