#include <random>
This header adds random number generation facilities and can produce random numbers using generators and distributions.
Generators: Objects that produces a sequence of pseudo-random values uniformly distributed numbers within a specified range of an engine.
Distributions: Objects that transform sequences of numbers generated by a generator into sequences of numbers that follow a specific random variable distribution, such as Uniform, Normal or Binomial.
Random number engines | Predefined generators |
---|---|
linear_congruential_engine | minstd_rand0 minstd_rand |
mersenne_twister_engine | mt19937 mt19937_64 |
implements a subtract-with-carry | ranlux24 ranlux48 |
#include <iostream> #include <random> #include <array> #include <algorithm> #include <functional> using namespace std; int main() { std::array<int, 624> seed; std::random_device rd; std::generate_n(seed.data(), seed.size(), std::ref(rd)); std::seed_seq seq(std::begin(seed), std::end(seed)); std::mt19937 gen(seq); std::uniform_int_distribution<> distr(100, 200); // define the range cout << distr(gen); }
Example: Generate random numbers that are within += “range” of “value“
#include <iostream> #include <random> using namespace std; // generate random numbers within +- "range" of "value" // Note: The output will vary in every run double generate(double value, double range) { std::random_device rd; // obtain a random number from hardware std::mt19937 gen(rd()); // seed the generator double low = (1 - range) * value; // calculate low range double high = (1 + range) * value; // calculate high range std::uniform_int_distribution<> distr(low, high); // define the range return distr(gen); } int main() { // generate random number whose value lies between += 30% of 100 for (int i = 0; i < 10; i++) cout << generate(100, 0.3) << " "; return 0; }
99 85 107 82 109 101 129 80 123 115