【发布时间】:2011-07-22 16:27:16
【问题描述】:
在 C/C++ 中,rand() 和 srand() 通常被我们用来获取随机整数。但是当我尝试自己重写时,发现算法很难理解。函数很简单,几行就写好了,但是公式有误。
主要公式:
ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L;
涉及的原始代码:
void __cdecl srand (unsigned int seed)
{
_getptd()->_holdrand = (unsigned long)seed;
}
int __cdecl rand (void)
{
_ptiddata ptd = _getptd();
return ( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );
}
【问题讨论】:
-
嗯,我不知道,这个功能已经在那里了......为什么要尝试重新实现它?
-
@Rocky,尝试理解我们认为理所当然的代码基础并没有错。事实上,它应该被鼓励。
-
@Rocky:确实!如果你至少没有机会解释它的原理,就不要认为这是理所当然的。郭启:如果你厌倦了 LCG,可以看看 Mersenne Twister,一款流行、快速、高质量的 PRNG。
-
@Mark 谢谢你的鼓励:)我完全同意你的看法。
-
@Kerrek 谢谢你的回答,我试试看。