I am an experienced C programmer that is occasionally forced to use a little bit of C++.
I need to generate random numbers from a normal distribution with a variety of means and variances. If I had a C function that did this called normal(float mean, float var) then I could write the following code:
int i;
float sample;
for(i = 0;i < 1000;i++)
{
  sample = normal(mean[i],variance[i]);
  do_something_with_this_value(sample);
}
Note that there is a different mean and variance for each value of i.
C does not contain a function called normal, but C++ does, well actually its called std::normal_distribution. Unfortunately my C++ is not good enough to understand the syntax in the documentation. Can anyone tell me how to achieve the functionality of my C code but using std::normal_distribution.
std::normal_distribution isn't function but templated class
you can use it like this:
#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;
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With