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