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 ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.