「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で特定の範囲内で一様に分散された乱数を生成するにはどうすればよいですか?

C++ で特定の範囲内で一様に分散された乱数を生成するにはどうすればよいですか?

2024 年 12 月 21 日に公開
ブラウズ:746

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

範囲にわたる一様な乱数の生成

指定された範囲 [最小、最大] 内で乱数を一様に生成する方法を探します。

rand の欠陥

rand() と法演算子を使用する現在の実装では、均一な分散が保証されない可能性があります。その動作は RAND_MAX と範囲自体に依存します。

C 11 と均一範囲生成

C 11 では、std::uniform_int_distribution がこのニーズに合わせたソリューションを提供します。

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

の追加機能

ヘッダーは、さまざまな分布を持つ膨大な数の乱数ジェネレーターを提供します。ベルヌーイ、ポアソン、正規として。

コンテナShuffle

コンテナをシャッフルするには、std::shuffle:

#include 
#include 

std::vector vec = {4, 8, 15, 16, 23, 42};
std::random_device random_dev;
std::mt19937 generator(random_dev());

std::shuffle(vec.begin(), vec.end(), generator);

Boost.Random

C 11 コンパイラの使用が不可能な場合Boost.Random について考えてみましょう。これは、C 11 の対応物と同様のインターフェイスを備えています。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3