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 |