Rand() % 14 不均一な値を生成する
特定の範囲内でランダムな値を生成しようとすると、一部のプログラマは次のような問題に遭遇する可能性があります。 rand() 関数使用時の異常な動作。よく報告される問題の 1 つは、rand() % 14 が一貫して 6 または 13 の値を返すというものです。
この現象を理解するには、rand() の基礎となるアルゴリズムを詳しく調べることが重要です。 Apple のマシンで使用される特定の実装は、Multiply-with-Carry (MWC) ジェネレーターに基づいています。残念ながら、このジェネレーターの弱点は 7 で割り切れること、特に乗数値 16807 です。
その結果、srand() の初期化直後に生成される最初のいくつかの乱数の下位ビットは制限されています。エントロピ。 rand() % 14 の場合、下位ビットは常に同じ値になり、考えられる結果は 6 または 13 の 2 つだけになります。
この問題を軽減するための簡単な解決策は、破棄することです。初期化後に生成される最初のいくつかの乱数。結果を使用せずに rand() をさらに数回呼び出すと、アルゴリズムの内部状態がよりカオスになり、値の一様な分布が復元されます。
以上が`rand() % 14` が不均一な結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。