Пространства имён
Варианты
Действия

rand

Материал из cppreference.com
< c‎ | numeric‎ | random
Определено в заголовочном файле <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()
(макроконстанта)[править]
close