ホームページ > バックエンド開発 > C++ > `rand() % 14` が不均一な結果を生成するのはなぜですか?

`rand() % 14` が不均一な結果を生成するのはなぜですか?

Patricia Arquette
リリース: 2024-12-03 05:46:09
オリジナル
1012 人が閲覧しました

Why Does `rand() % 14` Produce Non-Uniform Results?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート