ホームページ > バックエンド開発 > C++ > 指定された範囲内で真に均一に分散されたランダムな整数を生成するにはどうすればよいでしょうか?

指定された範囲内で真に均一に分散されたランダムな整数を生成するにはどうすればよいでしょうか?

Barbara Streisand
リリース: 2024-12-20 15:43:17
オリジナル
186 人が閲覧しました

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

均一に分散されたランダムな整数の生成

多くのプログラミング アプリケーションでは、指定された範囲内でランダムな整数を生成することが一般的な要件です。ただし、これらの整数が確実に均一に分散されるようにすることには課題があります。この記事では、一様な分布を実現するためのさまざまなアプローチについて説明します。

既存のコードと制限事項

ユーザーが提供したコードは、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート