Пространства имён
Варианты
Действия

std::rand

Материал из cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
Генерация псевдослучайных чисел
Генераторы равномерных случайных битов
Генераторы и адаптеры генераторов
Недетерминированный генератор
Распределения
Равномерные распределения
Распределения Бернулли
Распределения Пуассона
Нормальные распределения
Распределения выборки
Последовательности настройки
(C++11)
Библиотека C
rand
 
Определено в заголовочном файле <cstdlib>
int rand();

Возвращает псевдослучайное целочисленное значение между 0 и RAND_MAX (включая 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 вместо rand(). (начиная с C++11)

[править] Пример

#include <cstdlib>
#include <ctime>
#include <iostream>
 
int main() 
{
    std::srand(std::time(nullptr)); // использовать текущее время в качестве
                                    // начального значения для генератора случайных чисел
    int random_variable = std::rand();
    std::cout << "Случайное значение в диапазоне [0, " << RAND_MAX << "]: " 
              << random_variable << '\n';
 
    // бросаем 6-гранный кубик 20 раз
    for (int n=0; n != 20; ++n)
    {
        int x = 7;
        while(x > 6) 
            x = 1 + std::rand()/((RAND_MAX + 1u)/6);  // Примечание: 1+rand()%6
                                                      // имеет смещение
        std::cout << x << ' ';
    }
}

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

Случайное значение в диапазоне [0, 2147483647]: 726295113
6 3 6 2 6 5 6 3 1 1 1 6 6 6 4 1 3 6 4 2

[править] Смотрите также

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