rand
|
Определено в заголовочном файле
<stdlib.h>
|
||
|
int
rand
(
)
;
|
||
Возвращает псевдослучайное целое число в диапазоне от
0
до
RAND_MAX
(включительно
0
и
RAND_MAX
).
srand()
инициализирует генератор псевдослучайных чисел, используемый функцией
rand()
.
Если
rand()
используется до любого вызова
srand()
,
rand()
ведет себя так, как если бы она была инициализирована с помощью
srand
(
1
)
.
Каждый раз, когда
rand()
инициализируется с помощью
srand()
, она должна выдавать одинаковую последовательность значений.
rand()
не гарантирует потокобезопасность.
Содержание |
Параметры
(нет)
Возвращаемое значение
Псевдослучайное целое число в диапазоне от 0 до RAND_MAX включительно.
Примечания
Не дается никаких гарантий относительно качества производимой случайной последовательности.
В прошлом некоторые реализации
rand()
имели серьезные недостатки в случайности, распределении и периоде производимой последовательности (в одном известном примере младший бит просто чередовался между
1
и
0
между вызовами).
rand()
не рекомендуется для серьезных задач генерации случайных чисел, таких как криптография.
POSIX требует, чтобы период генератора псевдослучайных чисел, используемого функцией
rand
, составлял не менее
2
32
.
POSIX предлагает потокобезопасную версию функции rand под названием
rand_r
, которая устарела в пользу семейства функций
drand48
.
Пример
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); // используем текущее время как seed для генератора случайных чисел int random_variable = rand(); printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable); // бросаем 6-гранный кубик 20 раз for (int n=0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + rand()/((RAND_MAX + 1u)/6); // Примечание: 1+rand()%6 является смещенным printf("%d ", x); } }
Возможный вывод:
Random value on [0,2147483647]: 448749574 3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.22.2.1 Функция rand (стр. 252)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.22.2.1 Функция rand (стр. 346)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.20.2.1 Функция rand (стр. 312)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.2.1 Функция rand
Смотрите также
|
инициализирует генератор псевдослучайных чисел
(функция) |
|
|
максимальное возможное значение, генерируемое
rand
(
)
(макроконстанта) |
|
|
C++ documentation
для
rand
|
|