【发布时间】:2011-10-27 13:01:11
【问题描述】:
__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 是经过精心挑选的”,但它们是如何选择的?
【问题讨论】:
-
Normal distribution?你确定这就是你的意思吗?
-
Fred Larson:我编辑了我的帖子,抱歉我的“错字”。我写正态分布是因为(如果我认为正确的话)正态分布是从现实世界中观察到的,所以一个好的 PRNG 应该复制正态分布的行为以生成一个好的随机序列?我是对的吗?顺便说一句,生成器来自这里software.intel.com/en-us/articles/…
-
一些自然现象被很好地建模为正态分布。其他的,例如掷骰子,则不是。
-
André Caron、Fred Larson:好的,谢谢,我刚刚从 wiki 阅读了关于统一分发的内容,现在我明白了!