Namespaces
Variants
Views
Actions

std::rand

From cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
Pseudo-random number generation
Uniform random bit generators
Engines and engine adaptors
Non-deterministic generator
Distributions
Uniform distributions
Bernoulli distributions
Poisson distributions
Normal distributions
Sampling distributions
Seed Sequences
(C++11)
C library
rand
 
Defined in header <cstdlib>
int rand();

Returns a pseudo-random integral value from the range [0RAND_MAX].

std::srand() seeds the pseudo-random number generator used by rand(). If rand() is used before any calls to std::srand(), rand() behaves as if it was seeded with std::srand(1).

Each time rand() is seeded with std::srand(), it must produce the same sequence of values on successive calls.

Other functions in the standard library may call rand. It is implementation-defined which functions do so.

It is implementation-defined whether rand() is thread-safe.

Contents

[edit] Parameters

(none)

[edit] Return value

Pseudo-random integral value between 0 and RAND_MAX.

[edit] Notes

There are no guarantees as to the quality of the random sequence produced. In the past, some implementations of rand() have had serious shortcomings in the randomness, distribution and period of the sequence produced (in one well-known example, the low-order bit simply alternated between 1 and 0 between calls).

rand() is not recommended for serious random-number generation needs. It is recommended to use C++11's random number generation facilities to replace rand().(since C++11)

[edit] Example

#include <cstdlib>
#include <ctime>
#include <iostream>
 
int main() 
{
    std::srand(std::time(nullptr)); // use current time as seed for random generator
    int random_value = std::rand();
    std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << "\n"
                 "Roll 6-sided dice 20 times: ";
    for (int n = 0; n != 20; ++n)
    {
        int x = 7;
        while (x > 6) 
            x = 1 + std::rand() / ((RAND_MAX + 1u) / 6); // Note: 1 + rand() % 6 is biased
        std::cout << x << ' ';
    }
    std::cout << '\n';
}

Possible output:

Random value on [0, 2147483647]: 726295113
Roll 6-sided dice 20 times: 6 3 6 2 6 5 6 3 1 1 1 6 6 6 4 1 3 6 4 2

[edit] See also

produces integer values evenly distributed across a range
(class template) [edit]
seeds pseudo-random number generator
(function) [edit]
maximum possible value generated by std::rand
(macro constant) [edit]
generates a random integer in the specified range
(function template) [edit]