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
, был как минимум равен 232
.
POSIX предложил потокобезопасную версию rand под нзаванием rand_r
, которая устарела с появлением семейства функций drand48
.
[править]Пример
#include <stdio.h>#include <stdlib.h>#include <time.h> int main(void){srand(time(NULL));// используем текущее время для инициализации генератора случайных чисел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++ по rand |