std::rand (3) - Linux Manuals

std::rand: std::rand

NAME

std::rand - std::rand

Synopsis


Defined in header <cstdlib>
int rand();


Returns a pseudo-random integral value between 0 and RAND_MAX (0 and RAND_MAX included).
std::srand() seeds the pseudo-random number generator used by rand(). If rand() is used before any calls to srand(), rand() behaves as if it was seeded with srand(1).
Each time rand() is seeded with 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 <iostream>
  #include <ctime>


  int main()
  {
      std::srand(std::time(nullptr)); // use current time as seed for random generator
      int random_variable = std::rand();
      std::cout << "Random value on [0 " << RAND_MAX << "]: "
                << random_variable << '\n';


      // roll a 6-sided die 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 << ' ';
      }
  }

Possible output:


  Random value on [0 2147483647]: 726295113
  6 3 6 2 6 5 6 3 1 1 1 6 6 6 4 1 3 6 4 2

See also


uniform_int_distribution produces integer values evenly distributed across a range
                         (class template)
(C++11)
                         seeds pseudo-random number generator
srand (function)
                         maximum possible value generated by std::rand
RAND_MAX (macro constant)
                         generates a random integer in the specified range
randint (function template)