我想知道在C ++标准库中是否有任何高斯分布数字生成器,或者您是否有任何代码片段可以传递。
提前致谢。
答案 0 :(得分:15)
标准库没有。然而,Boost.Random确实如此。如果我是你,我会用它。
答案 1 :(得分:13)
C ++技术报告1增加了对随机数生成的支持。因此,如果您使用的是相对较新的编译器(visual c ++ 2008 GCC 4.3),则可能是开箱即用的。
有关std::tr1::normal_distribution
的示例用法(以及更多内容),请参阅here。
答案 2 :(得分:6)
GNU Scientific Libraries具有此功能。 GSL - Gaussian Distribution
答案 3 :(得分:4)
这个问题的答案在C ++ 11中有所改变,其中random header包括std::normal_distribution。 Walter Brown的论文N3551, Random Number Generation in C++11可能是对这个图书馆更好的介绍之一。
以下代码演示了如何使用此标头( see it live ):
#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++ random float number generation时使用Boost中的示例并使用rand()
为C ++ 11中的随机数生成提供了一组更为通用的示例。