如何使用std::normal_distribution

问题描述 投票:0回答:1

我是一位经验丰富的 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++ 还不够好,无法理解文档中的语法。谁能告诉我如何使用 std::normal_distribution 来实现 C 代码的功能。

c++
1个回答
29
投票

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], stddev[i]}; 

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

        // profit
        do_something_with_this_value(sample); 
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.