Генерация псевдослучайных чисел в C++

Для генерации псевдослучайных чисел в C++ используется функция
rand()
, которая возвращает случайное число из диапазона от 0 до RAND_MAX (RAND_MAX — константа, определенная в cstdlib. Значение зависит от версии библиотеки. В стандартных реализациях это значение больше или равно 32767.)
Для получения значения RAND_MAX можно использовать команду
cout << RAND_MAX;

На практике очень часто требуется генерировать число из диапазона от 0 до N.
Для этого можно использовать операцию нахождения остатка от деления %. В этом случае выражение будет иметь вид
rand()%(N+1)
Например, для получения числа из отрезка от 0 до 9, можно использовать выражение
rand()%10
Для получения числа из отрезка от a до b можно использовать выражение
a+rand()%b
Например,
1+rand()%10
возвращает значение от 1 до 10.

При повторном запуске программы функция rand() возвращает тоже самое значение.
Это связано с тем, что алгоритмы генерации псевдослучайных чисел основаны на использовании некоторого начального значения (seed). Для изменения последовательности получаемых чисел, необходимо изменять это значение.
Для этого используется функция
srand(int seed)
Функция srand генерирует новую последовательность псевдослучайных чисел для каждого нового значения seed.

Например, используя фрагменты кода
srand(5);
rand()%10;
и
srand(7);
rand()%10;
будем получать два различных псевдослучайных числа из диапазона от 0 до 9.

Для автоматического изменения параметра seed при каждом запуске программы часто используют значение системного времени. Для этого применяется функция time(0) из библиотеки ctime
Например, приведенный ниже код генерирует новый набор случайных значений для переменных a,b,c из отрезка от 1 до 100 при каждом запуске программы
#include <iostream>
#include <ctime>
using namespace std;

int main(){
    int a,b,c;
    srand(time(0));
    a=1+rand()%100;
    b=1+rand()%100;
    c=1+rand()%100;
    cout << a << " " << b << " " << c << endl;
    return 0;
}
  • avatar
  • 0

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.