如何使用std :: normal_distribution

时间:2016-07-07 11:57:13

标签: c++

我是一名经验丰富的C程序员,偶尔会被迫使用一点点C ++。

我需要通过各种均值和方差从正态分布中生成随机数。如果我有一个名为normal(float mean, float var)的C函数,那么我可以编写以下代码:

int i;
float sample;
for(i = 0;i < 1000;i++)
{
  sample = normal(mean[i],variance[i]);
  do_something_with_this_value(sample);
}

请注意,i的每个值都有不同的均值和方差。

C不包含一个名为normal的函数,但是C ++实际上是一个名为std :: normal_distribution的函数。不幸的是,我的C ++还不足以理解文档中的语法。任何人都可以告诉我如何实现我的C代码的功能,但使用std :: normal_distribution。

1 个答案:

答案 0 :(得分:15)

std::normal_distribution不是函数但是模板化的类

你可以像这样使用它:

#include <random>

int main(int, char**)
{
    // random device class instance, source of 'true' randomness for initializing random seed
    std::random_device rd; 

    // Mersenne twister PRNG, initialized with seed from previous random device instance
    std::mt19937 gen(rd()); 

    int i;
    float sample;
    for(i = 0; i < 1000; ++i)
    {
        // instance of class std::normal_distribution with specific mean and stddev
        std::normal_distribution<float> d(mean[i], variance[i]); 

        // get random number with normal distribution using gen as random source
        sample = d(gen); 

        // profit
        do_something_with_this_value(sample); 
    }
    return 0;
}