ホームページ >バックエンド開発 >C++ >Apple プラットフォームでは「rand() % 14」が 6 と 13 のみを生成するのはなぜですか?

Apple プラットフォームでは「rand() % 14」が 6 と 13 のみを生成するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-26 04:53:13677ブラウズ

Why Does `rand() % 14` Only Generate 6 and 13 on Apple Platforms?

Rand() % 14 値 6 または 13 のみを生成します: 謎を解く

あなたが直面している問題は、固有のあなたが提供した回答で説明されているように、Apple プラットフォームでの rand() 関数の実装には制限があります。デフォルトのパラメーターを使用すると、rand() で使用される乱数ジェネレーターは、14 で割ったときにエントロピーが制限されたシーケンスを生成し、6 と 13 の 2 つの値のみの間で循環します。

この問題を修正するには、次のようにします。次の手順を実行できます:

  1. その後 Rand() を複数回呼び出します。 Srand(): 回答で提案されているように、srand(time(NULL)) を呼び出した後、rand() によって生成された最初のいくつかの結果を破棄します。そうすることで、6 と 13 のみを生成する最初のサイクルを排除します。
  2. 別の乱数ジェネレーターを使用する: 上記の方法で問題が解決しない場合は、別の乱数ジェネレーターに切り替えることを検討してください。メルセンヌ ツイスターなど、より優れたエントロピーを提供する乱数ジェネレーター。代替の乱数ジェネレーターは、C ライブラリーまたは個別の実装として見つけることができます。
  3. 乱数の範囲を変更する: 編集で述べたように、rand() の範囲を 13 に変更します。または 15 にすると正しく動作します。これは、乗数 15 (例: 752574) と 13 (例: 220379) がそれぞれの余りで割り切れないためです。ただし、範囲の変更は、特に 0 から 13 までの乱数が必要な場合、特定のユースケースには適していない可能性があります。

Apple プラットフォームの乱数ジェネレーターの根本的な問題に対処することで、 rand() % 14 は、0 から 13 までの値のより均等に分散されたシーケンスを生成することを保証できます。

以上がApple プラットフォームでは「rand() % 14」が 6 と 13 のみを生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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