c++ - 这个 PRNG 背后的理论是什么?

标签 c++ random theory

__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/

相关文章:

c++ - 在 C++ 中将对象添加到对象数组

c++ - tensorflow 和 tflearn C++ API

c++ - 枚举范围困惑

r - f(g(x))在一起或分开时的结果不一致

java - 生成唯一随机数列表

algorithm - 什么是 SAT,它有什么用处?

c++ - boost::geometry::model::linestring 与 boost::geometry::model::polygon 的交集

php - 单击按钮时的随机图像

c++ - 用 C/C++ 代码中的定义替换所有函数调用

regex - 为这些语言编写正则表达式?