均一に分散されたランダムな整数の生成
多くのプログラミング アプリケーションでは、指定された範囲内でランダムな整数を生成することが一般的な要件です。ただし、これらの整数が確実に均一に分散されるようにすることには課題があります。この記事では、一様な分布を実現するためのさまざまなアプローチについて説明します。
既存のコードと制限事項
ユーザーが提供したコードは、rand() 関数を利用して、ランダムな値内で乱数を生成します。与えられた範囲。ただし、このアプローチでは、特に のような小さな範囲では均一性に欠けるという問題があります。これは、rand() が RAND_MAX (最大値) を返す可能性が低いことが原因です。
提案された式
この問題に対処するために、ユーザーは新しい式を考案しました。
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
この式は均一性の向上を目指していますが、サンプリングによって明らかなように、まだ不十分です。 data.
C 標準ライブラリ ソリューション
C 標準ライブラリは、この問題に対する洗練された信頼性の高いソリューションを提供します。 std::random ヘッダーには、一様な分布で乱数を生成できる一連の乱数ジェネレーターと分布が含まれています。
#include <random> // Initialize random-number engine with a seed std::random_device rd; std::mt19937 rng(rd()); // Define uniform integer distribution std::uniform_int_distribution<int> uni(min, max); // Generate random integer within range auto random_integer = uni(rng);
このアプローチは、十分にテストされ最適化されたコードを活用し、均一な分布と効率を保証します。これにより、車輪の再発明の必要性がなくなり、バイアスやシード値に関する懸念もなくなります。
以上が指定された範囲内で真に均一に分散されたランダムな整数を生成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。