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
См. также
|
(C++11) | генерирует целочисленные значения, равномерно распределённые в заданном диапазоне (шаблон класса) |
| задаёт начальное состояние генератора псевдослучайных чисел (функция) |
|
максимальное возможное значение, генерируемое std::rand (макро-константа) |
|
| генерирует случайное целое число в заданном диапазоне (шаблон функции) |
|
Документация C для rand |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/random/rand