Генерация случайных чисел

Случайные числа в настоящее время широко используются при тестировании программ, в игровых приложениях, компьютерном моделировании. Рассмотрим основы теории случайных чисел, необходимые для осуществления тестирования программ.

При включении в С++ программу заголовочного файла <cstdlib> становится доступной библиотечная функция rand(). Повторяющиеся вызовы rand() позволяют сгенерировать последовательность целых чисел в диапазоне от 0 до RAND_MAX (значение константы RAND_MAX варьируется в зависимости от реализации языка и в большинстве случаев равно 32767). Эта последовательность является псевдослучайной, т. к. генерируется с помощью математической формулы и с определенного места начинает повторяться (т. е. становится предсказуемой). Убедиться в этом можно, например, с помощью программы генерации последовательности десяти целых чисел.

использование функции rand()

Итак, каждый запуск программы позволяет сгенерировать один и тот же набор чисел. Для того, чтобы последовательность каждый раз была разной нужно воспользоваться функцией srand() из стандартной библиотеки. Указанная функция принимает в качестве аргумента целое число без знака, с помощью которого инициализируется новая стартовая точка для функции rand().

Разные значения аргумента можно обеспечить используя следующую инструкцию:

srand(time(0));

Функция time() c нулевым аргументом возвращает количество секунд, прошедших с полуночи (00:00:00) 1 января 1970 года. Данная функция доступна после подключения в программу на языке С++ заголовочного файла <ctime> (смотрите листинг ниже).

Часто в различных задачах указывается определенный диапазон, в котором могут изменяться значения чисел последовательности. В этом случае для генерации целых чисел, удовлетворяющих условиям, можно воспользоваться следующей формулой:

min + rand( ) % (max - min + 1)

где min и max, соответственно, минимальное и максимальное значение в диапазоне. Например, выражение:

-50 + rand( ) % 101 // (max - min + 1) = 50 - (-50) + 1 = 101

позволяет генерировать целые числа в диапазоне от – 50 до 50.

использование функции srand()