C ++:生成高斯分布

时间:2009-07-10 13:14:11

标签: c++ gaussian normal-distribution

我想知道在C ++标准库中是否有任何高斯分布数字生成器,或者您是否有任何代码片段可以传递。

提前致谢。

4 个答案:

答案 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中的随机数生成提供了一组更为通用的示例。