11.6. Generating Random Numbers
Problem
You want to generate some
random floating-point numbers in the interval of [0.0, 1.0) with a uniform
distribution.
Solution
The C++ standard provides the C runtime function rand in the <cstdlib> header that
returns a random number in the range of 0 to RAND_MAX inclusive. The RAND_MAX macro represents the highest value returnable by the rand
function. A demonstration of using rand to
generate random floating-point numbers is shown in Example 11-11.
Example 11-11. Generating random numbers using rand
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
double doubleRand() {
return double(rand()) / (double(RAND_MAX) + 1.0);
}
int main() {
srand(static_cast<unsigned int>(clock()));
cout << "expect 5 numbers within the interval [0.0, 1.0)" << endl;
for (int i=0; i < 5; i++) {
cout << doubleRand() << "\n";
}
cout << endl;
}The program in Example 11-11 should produce output similar to:
expect 5 numbers within the interval [0.0, 1.0) 0.010437 0.740997 0.34906 0.369293 0.544373
Discussion
To be precise, random number generation functions, including rand, return pseudo-random numbers as opposed to truly random numbers, so
whenever I say random, I actually mean pseudo-random.
Before using the rand function you need to seed
(i.e., initialize) the random number generator with a call to srand. This assures that subsequent calls to rand won’t produce the same sequence of numbers each time the program is run. The simplest way to seed the ...