Функция rand возвращает целые псевдослучайные числа, равномерно распределенные в диапазоне от 0 до RAND_MAX (0x7FFFU - 32767). Длина отрезка апериодичности псевдослучайных чисел 232 = 4 294 96 7 296. Число используемых случайных чисел не должно превышать эту величину. Если все-таки требуется больше чисел, то необходимо при приближении к границе отрезка апериодичности (а лучше задолго до нее) обновить последовательность чисел с помощью функций randomize или srand.
Если желательно генерировать случайные числа, лежащие в диапазоне от 0 до некоторого значение N, то это легко делать операцией вычисления остатка %. Например, выражение:
rand()%101;
возвращает числа в диапазоне от 0 до 100, а выражение:
(randl()%201) - 100;
возвращает числа в диапазоне от -100 до 100.
Функцию rand можно использовать и для генерации действительных случайных чисел. Например, выражение:
10 * rand() / RAND_МАХ;
генерирует псевдослучайные действительные числа, распределенные в диапазоне от 0 до 10.
Функция _lrand работает аналогично функции rand, но имеет отрезок апериодичности 264 и диапазон от 0 до 231 - 1.
Функция random отличается от предыдущих тем, что имеет параметр num, определяющий верхнюю границу диапазона генерируемых чисел. Поэтому, если надо, например, генерировать числа в диапазоне от 0 до 100, это можно сделать выражением:
random(101);
не прибегая, как для предыдущих функций, к операции %.
Функция RandG генерирует квазислучайные действительные числа, распределенные но нормальному закону (закону Гаусса) с математическим ожиданием Mean и средним квадратичным отклонением StdDev. При работе с этой функцией надо иметь в виду, что файл Math.hpp в C++Builder автоматически не подключается к модулю приложения. Поэтому в модуль необходимо вручную вводить директиву:
#include <Math.hpp>
Поскольку генерируемые рассматриваемыми функциями числа являются псевдослучайными, то при каждом новом запуске приложения будет вырабатываться одна и та же последовательность чисел. Если это недопустимо, надо рандомизировать генератор чисел, т.е. задавать ему каждый раз новое случайное исходное число. Рандомизацию всех генераторе», кроме RandG, осуществляет функция randomize. Достаточно вставить где-то в текст программы (например, в событие OnCreate формы) оператор:
randomize();
чтобы при каждом запуске приложения генерировалась новая последовательность чисел.
Функция srand отличается от randomize тем, что задает в качестве начального не случайное число, а значение своего параметра seed.
Рандомизацию генератора RandG осуществляет функция Randomize, аналогичная randomize. Задание конкретного начального числа для этого генератора можно осуществить, задавая значение целой переменной RandSeed, определенной в файле System.hpp.
Функция | Синтаксис / Описание | Файл |
_lrand | long _lrand(void) Псевдослучайное целое, диапазон от 0 до 231 - 1 | stdlib.h |
rand | int rand(void) Псевдослучайное целое, диапазон от 0 до RAND_MAX | stdlib.h |
RandG | Extended RandG(Extended Mean, Extended StdDev) Псевдослучайные числа, распределенные по нормальному закону Mean - математическое ожидание StdDev - среднее квадратичное отклонение | Math.hpp |
random | int random(int num) Псевдослучайное целое, диапазон от 0 до num - 1 | stdlib.h |
randomize | void randomize(void) Рандомизация генераторов (кроме RandG) случайной величиной | stdlib.h |
Randomize | void Randomize(void) Рандомизация RandG случайной величиной | Math.hpp |
srand | void srand(unsigncd seed) Рандомизация генераторов (кроме RandG) числом seed | stdlib.h |