Spec-Zone.ru › C++

std::rand

Определён в заголовочном файле <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() не рекомендуется для серьёзных задач генерации случайных чисел. Для замены rand() рекомендуется использовать средства генерации случайных чисел из C++11.(начиная с C++11)

Пример

Приведённая ниже функция bounded_rand() является адаптированной версией модуля без смещения (однократного).

#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

См. также

uniform_int_distribution
(C++11)
генерирует целочисленные значения, равномерно распределённые в заданном диапазоне
(шаблон класса)
srand
задаёт начальное состояние генератора псевдослучайных чисел
(функция)
RAND_MAX
максимальное возможное значение, генерируемое std::rand
(макро-константа)
randint
генерирует случайное целое число в заданном диапазоне
(шаблон функции)
Документация C для rand

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/random/rand

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API