Rand() % 14 値 6 または 13 のみを生成します: 謎を解く
あなたが直面している問題は、固有のあなたが提供した回答で説明されているように、Apple プラットフォームでの rand() 関数の実装には制限があります。デフォルトのパラメーターを使用すると、rand() で使用される乱数ジェネレーターは、14 で割ったときにエントロピーが制限されたシーケンスを生成し、6 と 13 の 2 つの値のみの間で循環します。
この問題を修正するには、次のようにします。次の手順を実行できます:
-
その後 Rand() を複数回呼び出します。 Srand(): 回答で提案されているように、srand(time(NULL)) を呼び出した後、rand() によって生成された最初のいくつかの結果を破棄します。そうすることで、6 と 13 のみを生成する最初のサイクルを排除します。
-
別の乱数ジェネレーターを使用する: 上記の方法で問題が解決しない場合は、別の乱数ジェネレーターに切り替えることを検討してください。メルセンヌ ツイスターなど、より優れたエントロピーを提供する乱数ジェネレーター。代替の乱数ジェネレーターは、C ライブラリーまたは個別の実装として見つけることができます。
-
乱数の範囲を変更する: 編集で述べたように、rand() の範囲を 13 に変更します。または 15 にすると正しく動作します。これは、乗数 15 (例: 752574) と 13 (例: 220379) がそれぞれの余りで割り切れないためです。ただし、範囲の変更は、特に 0 から 13 までの乱数が必要な場合、特定のユースケースには適していない可能性があります。
Apple プラットフォームの乱数ジェネレーターの根本的な問題に対処することで、 rand() % 14 は、0 から 13 までの値のより均等に分散されたシーケンスを生成することを保証できます。
以上がApple プラットフォームでは「rand() % 14」が 6 と 13 のみを生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。