Random Number Generation with C++ 0x in GCC 2
In this post, I woud like to explore how random number would be generated by using newly added features from C++ 0x in GCC.
Rather than explaining the details of C++ 0x, I just post code here:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <random> #include <iostream> #include <string> #include <stdio.h> #include <time.h> using namespace std; int main() { int n; double p, lambda, shape, mu, sigma; mt19937 eng(time(NULL)); uniform_int_distribution<int> uniform_int(3,7); for(int i=0; i < 10; i++) cout << "[Uniform INT distribution]:" << uniform_int(eng) << endl; cout << endl; uniform_real_distribution<double> uniform_real(0.0,1.0); for(int i=0; i < 10; i++) cout << "[Uniform REAL distribution]:" << uniform_real(eng) << endl; cout << endl; n = 5; p = 0.3; binomial_distribution<int> binomial(n, p); for(int i=0; i < 10; i++) cout << "[Binomial distribution]:" << binomial(eng) << endl; cout << endl; lambda = 4.0; exponential_distribution<double> exponential(lambda); for(int i=0; i < 10; i++) cout << "[Exponential distribution]:" << exponential(eng) << endl; cout << endl; shape = 3.0; gamma_distribution<double> gamma(shape); for(int i=0; i < 10; i++) cout << "[Gamma distribution]:" << gamma(eng) << endl; cout << endl; p = 0.5; geometric_distribution<int> geometric(p); for(int i=0; i < 10; i++) cout << "[Geometric distribution]:" << geometric(eng) << endl; cout << endl; mu = 3.0; sigma = 4.0; normal_distribution<double> normal(mu, sigma); for(int i=0; i < 10; i++) cout << "[Gaussian distribution]:" << normal(eng) << endl; cout << endl; lambda = 7.0; poisson_distribution<int> poisson(lambda); for(int i=0; i < 10; i++) cout << "[Poission distribution]:" << poisson(eng) << endl; cout << endl; p = 0.6; bernoulli_distribution bernoulli(p); for(int i=0; i < 10; i++) cout << "[Bernoulli distribution]:" << bernoulli(eng) << endl; cout << endl; return (0); } |
Note, the code is very clean in the sense that you don’t need any extra libraries at all.
Please compile with:
g++ -std=gnu++0x |
The GCC I used is GCC 4.6.1
Several references:
1. http://www.johndcook.com/test_TR1_random.html (sort of out-dated)
2. http://www.johndcook.com/cpp_TR1_random.html (sort of out-dated)
3. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x (current status of C++ 0x in GCC)
4. http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html ( a list of header files of C++ in GCC)