table of contents
std::rand(3) | C++ Standard Libary | std::rand(3) |
NAME¶
std::rand - std::rand
Synopsis¶
Defined in header <cstdlib>
int rand();
Returns a pseudo-random integral value from the range [0, RAND_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.
Parameters¶
(none)
Return value¶
Pseudo-random integral value between 0 and RAND_MAX.
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)
Example¶
// Run this code
#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';
for (const int times = 8; const int sides : {2, 4, 6, 8})
{
std::cout << "Roll " << sides << "-sided
dice " << times << " times: ";
for (int n = 0; n != times; ++n)
{
int x = sides + 1;
while (x > sides)
x = 1 + std::rand() / ((RAND_MAX + 1u) / sides);
// Note: 1 + rand() % sides is biased
std::cout << x << ' ';
}
std::cout << '\n';
}
}
Possible output:¶
Random value on [0, 2147483647]: 948298199
Roll 2-sided dice 8 times: 2 2 1 2 1 1 2 2
Roll 4-sided dice 8 times: 1 3 4 2 1 3 3 1
Roll 6-sided dice 8 times: 3 2 1 6 6 4 4 2
Roll 8-sided dice 8 times: 4 5 6 6 3 6 1 2
See also¶
uniform_int_distribution produces integer values evenly
distributed across a range
(C++11) (class template)
srand seeds pseudo-random number generator
(function)
RAND_MAX maximum possible value generated by std::rand
(macro constant)
randint generates a random integer in the specified range
(function template)
C documentation for
rand
2024.06.10 | http://cppreference.com |