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

rand

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