ホームページ  >  記事  >  バックエンド開発  >  `rand() % 14` が時々 6 または 13 しか返さないのはなぜですか?

`rand() % 14` が時々 6 または 13 しか返さないのはなぜですか?

DDD
DDDオリジナル
2024-11-25 10:34:11327ブラウズ

Why Does `rand() % 14` Sometimes Only Return 6 or 13?

Rand() % 14: 繰り返し値の謎を解明する

プログラミングでは、rand() 関数はランダムな値を生成するためによく使用されます。数字。ただし、一部のユーザーは、式 rand() % 14 が一貫して 6 または 13 のみを生成するという興味深い問題に遭遇しました。

この動作を理解するために、rand() の仕組みを詳しく見てみましょう。これは、特定の乗算器を含む Apple の Mersenne Congruential Generator (MCG) アルゴリズムを利用します。残念ながら、この乗数は 7 で割り切れるため、限られた範囲内で乱数を生成するときに不安定な動作が発生します。

具体的には、srand() を呼び出した後に生成される最初の乱数は、14 を法とするエントロピー 1 ビットのみを示します。これは、6 または 13 の 2 つの値のみを想定できることを意味します。

この問題を回避するには、簡単な解決策があります。 rand() を数回呼び出して結果を破棄するだけで、ランダム性が導入されます。これにより、 rand() % 14 で使用される最初の乱数が初期シードの影響を受けないようになります。

以上が`rand() % 14` が時々 6 または 13 しか返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。