Namespaces
Variants

rand

From cppreference.net
Определено в заголовочном файле <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 ( )
(макроконстанта)