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

std::rand

Материал из cppreference.com
 
 
 
Генерация псевдослучайных чисел
Генераторы равномерных случайных битов
Генераторы и адаптеры генераторов
Недетерминированный генератор
Распределения
Равномерные распределения
Распределения Бернулли
Распределения Пуассона
Нормальные распределения
Распределения выборки
Последовательности настройки
(C++11)
Библиотека C
 
<tbody> </tbody>
Определено в заголовочном файле <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
(макроконстанта) [править]
генерирует случайное целое число в указанном диапазоне
(шаблон функции) [править]