C++:生成高斯分布

8
我想知道在C++标准库中是否有任何高斯分布的随机数生成器,或者如果你有任何代码片段可以提供。
谢谢。

一段C代码片段可以在类似的后续问题(点击此处)中找到。 - jcollomosse
4个回答

15

标准库不提供此功能,但 Boost.Random 提供了相应的功能。如果我是你,我会选择使用 Boost.Random。


13

C++技术报告1增加了对随机数生成的支持。因此,如果您使用的是相对较新的编译器(Visual C++ 2008 GCC 4.3),那么很可能它已经可以直接使用。

请参见此处以获取std::tr1::normal_distribution(以及更多)的示例用法。


1
如果还没有,您也可以在Boost中找到它:http://www.boost.org/doc/libs/1_39_0/doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.random - stephan

6

哈哈,我在查答案之前就写了那个... 我想我应该改一下 :) - Matt Price

4
这个问题的答案随着C++11而改变,它包含了random header,其中包括std::normal_distribution。Walter Brown的论文N3551, Random Number Generation in 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随机数生成示例,其中包括使用Boost和rand()的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接