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

C で均一に分散されたランダムな整数を生成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-24 20:17:11
オリジナル
848 人が閲覧しました

How Can I Generate Uniformly Distributed Random Integers in C  ?

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

ソフトウェアを開発する場合、指定された範囲内でランダムな整数を生成するのは一般的なタスクです。ただし、高速で均一に分散された乱数発生器を見つけるのは困難な場合があります。この記事では、指定された範囲内でランダムな整数を生成するためのさまざまなアプローチを検討することで、この問題に対処します。

簡単なアプローチ

ランダムな整数を生成する一般的な方法は、 rand() を使用することです。関数。ただし、元の質問で表現されているように、rand() は、特に狭い範囲で偏った分布を引き起こす可能性があります。

この問題に対処するために、代替の式が提案されました。

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
ログイン後にコピー

この式はより均一な分布を提供しますが、速度、均一な分布、可変範囲、およびシード可能性といったすべての要件にまだ対処できません。

C 標準ライブラリの救済

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 は、生成される整数の範囲を定義し、その範囲内のすべての値が同じ確率で選択されることを保証します。

このアプローチは、すべての要件を満たします。

  • 速度: 標準ライブラリの実装は、大量の乱数を生成する場合でも非常に効率的です。
  • 均一な分布: std::uniform_int_distribution 関数は、生成された数値の不偏かつ一様な分布を保証します。
  • 変数範囲: min パラメーターと max パラメーターを設定することで、分布を整数の任意の範囲にカスタマイズできます。
  • シーダビリティ: rd パラメータは、ジェネレータに特定の値をシードする手段を提供します。

優れたソリューション

結論として、C で一様に分散されたランダム整数を生成するための最も簡単で最良のアプローチは、 std::uniform_int_distribution 関数と std::mt19937 関数を使用することです。 。このアプローチは、標準ライブラリの最適化されたアルゴリズムを活用し、速度とランダム性の両方を保証します。

以上がC で均一に分散されたランダムな整数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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