Mon*_*lal 3 c random scheduling scheduler
我想设计一个彩票调度器,我需要一个非常好的(伪)随机数发生器,类似于LCG,但我想知道是否还有其他更好的选择?我特意寻找用C语言编写的随机生成器.
LCG代码:
unsigned long lcg_rand(unsigned long a)
{
return (a * 279470273UL) % 4294967291UL;
}
Run Code Online (Sandbox Code Playgroud)
另外我想知道是否srand()可以用于此目的或不是非常准确?
如果你需要简单但体面的质量,我会使用64位LCG的高32位(或更少),可能还有一个应用于输出的回火功能.这样做时,我复制了Mersenne Twister中使用的回火功能.我不建议实际使用Mersenne Twister,因为它比其他PRNG具有更多的复杂性和内部状态而没有明显更好的品质.
以下是一些示例代码:
static uint32_t temper(uint32_t x)
{
x ^= x>>11;
x ^= x<<7 & 0x9D2C5680;
x ^= x<<15 & 0xEFC60000;
x ^= x>>18;
return x;
}
uint32_t lcg64_temper(uint64_t *seed)
{
*seed = 6364136223846793005ULL * *seed + 1;
return temper(*seed >> 32);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6589 次 |
| 最近记录: |