__forceinline static int Random()
{
int x = 214013, y = 2531011;
seed = (x * seed + y);
return ((seed >> 16) & 0x7FFF) - 0x3FFF;
}
上面的代码返回具有良好均匀分布的 PRNG。
现在将 x 更改为 x + 1 - 生成的序列不能再称为 PRNG。
那么(这个)PRNG 背后的理论是什么? “x 和 y 是精心挑选的”,但它们是如何选择的?
最佳答案
这看起来像一个 Linear congruential generator .当乘数 x
可被模减一的所有质因数整除时,LCG 更好(此处为 0x3FFFFFFFF
,由于返回中的数学运算,它有点隐藏声明)。
关于c++ - 这个 PRNG 背后的理论是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916193/