ソフトウェアを開発する場合、指定された範囲内でランダムな整数を生成するのは一般的なタスクです。ただし、高速で均一に分散された乱数発生器を見つけるのは困難な場合があります。この記事では、指定された範囲内でランダムな整数を生成するためのさまざまなアプローチを検討することで、この問題に対処します。
ランダムな整数を生成する一般的な方法は、 rand() を使用することです。関数。ただし、元の質問で表現されているように、rand() は、特に狭い範囲で偏った分布を引き起こす可能性があります。
この問題に対処するために、代替の式が提案されました。
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
この式はより均一な分布を提供しますが、速度、均一な分布、可変範囲、およびシード可能性といったすべての要件にまだ対処できません。
C 標準ライブラリ関数 std::uniform_int_distribution とそれに関連する乱数生成器 std::mt19937 を紹介します。このアプローチは簡単かつ高速で、偏りのない結果が得られます。
#include <random> std::random_device rd; std::mt19937 rng(rd()); std::uniform_int_distribution<int> uni(min,max); auto random_integer = uni(rng);
std::random_device は実際のエントロピー ソースを使用してジェネレーターを初期化し、生成される数値が予測不可能でランダムであることを保証します。 std::uniform_int_distribution は、生成される整数の範囲を定義し、その範囲内のすべての値が同じ確率で選択されることを保証します。
このアプローチは、すべての要件を満たします。
結論として、C で一様に分散されたランダム整数を生成するための最も簡単で最良のアプローチは、 std::uniform_int_distribution 関数と std::mt19937 関数を使用することです。 。このアプローチは、標準ライブラリの最適化されたアルゴリズムを活用し、速度とランダム性の両方を保証します。
以上がC で均一に分散されたランダムな整数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。