C ++:ガウス分布を生成します
-
12-09-2019 - |
質問
私はあなたが合格するために任意のコードスニペットを持っている場合、C ++標準ライブラリであり任意のをガウス分布の番号ジェネレータがある場合、または知っていると思います。
事前に感謝します。
解決
標準ライブラリにはありません。 Boost.Randomはしかし、ありません。私があなただったら、私はそれを使用すると思います。
他のヒント
C ++テクニカルレポート1は、乱数生成のためのサポートを追加します。あなたは比較的最近のコンパイラ(のVisual C ++ 2008 GCC 4.3)を使用しているのであれば、チャンスはそれがそのまま使用可能であるということです。
ここをstd::tr1::normal_distribution
(および多く)の使用例を参照してください。
GNU科学ライブラリは、この機能を持っています。 GSL - ガウス分布する
ランダムヘッダを有するC ++ 11と、この質問の変化に
答え
のstd :: normal_distribution に含まれています。ウォルター・ブラウンの紙 N3551、乱数生成におけるC ++ 11 おそらくこのライブラリへのより良い紹介の一つです。次のコードは、このヘッダーを使用する方法を示します(のそれはのを生きる参照) :
#include <iostream>
#include <iomanip>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 e2(rd());
std::normal_distribution<> dist(2, 2);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::floor(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
私は C ++のランダムな浮動小数点数の世代に私の答えでC ++ 11で乱数生成の例のより一般的なセットを提供しますブーストの例では、同様にrand()
を使用します。
所属していません StackOverflow