Grzenio
Grzenio

Reputation: 36649

Gamma distributed random variables in C++

What is the easiest way to get a gamma distributed random variable in C++? Boost seems to have this functionality, but it is not clear for me how to use it.

Upvotes: 5

Views: 3887

Answers (3)

Howard Hinnant
Howard Hinnant

Reputation: 218780

Here is how you do it in C++11:

#include <random>
#include <iostream>

int main()
{
    typedef std::mt19937 G;
    typedef std::gamma_distribution<> D;
    G g;  // seed if you want with integral argument
    double k = .5;      // http://en.wikipedia.org/wiki/Gamma_distribution
    double theta = 2.0;
    D d(k, theta);
    std::cout << d(g) << '\n';
}

Your compiler may or may not yet support <random>. Boost random has just recently been modified to conform to the std::syntax, but I'm not sure if that modification has actually been released yet (or is still just on the boost trunk).

Upvotes: 6

Gareth McCaughan
Gareth McCaughan

Reputation: 19981

Looks like Gamma Distribution in Boost has some code that will do what you want. The bit you're probably missing is boost::variate_generator.

Upvotes: 1

Konrad Rudolph
Konrad Rudolph

Reputation: 545598

It’s pretty straightforward:

boost::mt19937 rng;
boost::gamma_distribution<> pdf(alpha);
boost::variate_generator<boost::mt19937&, boost::gamma_distribution<> >
    generator(rng, pdf);

Constructs a random number generator and a gamma distribution and glues them together into a usable generator. Now you can create random numbers by invoking the generator.

Upvotes: 8

Related Questions