C/C++では、ランダムな整数を取得するときに通常rand()
とsrand()
が使用されます。しかし、自分で書き直そうとしたときに、アルゴリズムを理解するのが難しいことが分かりました。関数は数行で非常に簡単に書かれますが、数式は誤解です。Visual C++のrand()関数のアルゴリズムを理解する
メイン式:
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に疲れたら、人気の高い、高品質のPRNGメルセンヌ・ツイスターをチェックしてください。 –