Namespaces
Variants

std:: rand

From cppreference.net
Определено в заголовочном файле <cstdlib>
int rand ( ) ;

Возвращает псевдослучайное целочисленное значение из диапазона [ 0 , RAND_MAX ] .

std::srand() инициализирует генератор псевдослучайных чисел, используемый функцией rand() . Если rand() используется до любого вызова std::srand() , rand() ведет себя так, как если бы она была инициализирована с помощью std:: srand ( 1 ) .

Каждый раз, когда rand() инициализируется с помощью std::srand() , он должен выдавать одинаковую последовательность значений при последующих вызовах.

Другие функции в стандартной библиотеке могут вызывать rand . Определяется реализацией, какие функции это делают.

Определяется реализацией, является ли rand() потокобезопасной.

Содержание

Возвращаемое значение

Псевдослучайное целочисленное значение между 0 и RAND_MAX .

Примечания

Не даётся никаких гарантий относительно качества производимой случайной последовательности. В прошлом некоторые реализации rand() имели серьёзные недостатки в случайности, распределении и периоде производимой последовательности (в одном известном примере младший бит просто чередовался между 1 и 0 между вызовами).

rand() не рекомендуется для серьёзных задач генерации случайных чисел. Рекомендуется использовать средства генерации случайных чисел C++11 random number generation для замены rand() . (since C++11)

Пример

Функция bounded_rand() ниже является адаптированной версией Debiased Modulo (Once) .

#include <cstdlib>
#include <ctime>
#include <initializer_list>
#include <iostream>
unsigned bounded_rand(unsigned range)
{
    for (unsigned x, r;;)
        if (x = rand(), r = x % range, x - r <= -range)
            return r;
}
int main() 
{
    std::srand(std::time({})); // use current time as seed for random generator
    const int random_value = std::rand();
    std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << '\n';
    for (const unsigned sides : {2, 4, 6, 8})
    {
        std::cout << "Roll " << sides << "-sided die 8 times: ";
        for (int n = 8; n; --n)
            std::cout << 1 + bounded_rand(sides) << ' ';
        std::cout << '\n';
    }
}

Возможный вывод:

Random value on [0, 2147483647]: 948298199
Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 
Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 
Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 
Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2

Смотрите также

генерирует целочисленные значения, равномерно распределенные в диапазоне
(шаблон класса)
инициализирует генератор псевдослучайных чисел
(функция)
максимальное возможное значение, генерируемое std::rand
(макроконстанта)
генерирует случайное целое число в указанном диапазоне
(шаблон функции)