Генерация случайного числа в нужном диапазоне (применение rand)
Написал microsin   
19.08.2007

В ANSI-C есть две функции, имеющие отношение к генерации псевдослучайной последовательности чисел (обычно нужно для их использования указать #include <stdlib.h>). Это
void srand (int seed);
int rand (int seed);

Функция srand нужна для инициализации псевдослучайного генератора начальным значением seed. Собственно генерирует псевдослучайное число только функция rand. Если в качестве параметра указано число, не равное 0, то происходит иницализация генератора псевдослучайных чисел. Если вызвать rand без параметров или с параметром, равным ноль, то rand вернет очередное псевдослучайное число.

Функция rand возвращает псевдослучайное число в диапазоне +0..+32767, что не всегда удобно. Для получения случайного числа в нужном диапазоне используют операцию взятия по модулю (остаток от деления) для результата rand. Вот пример функции, возвращающей число от minval до maxval включительно (функция простейшая, без проверки входных параметров, которые при некорректных величинах min и max могут вызвать ошибку деления на ноль):

u32 iRand (u32 minval, u32 maxval)
/* gen number between minsize..maxsize */
{
  u32 temp16;
  u32 divider, module, quotient;

  divider = (maxval - minval) +1;
  temp16 = (u32)rand();
  quotient = temp16 / divider;
  module = temp16 - divider * quotient;
  return (module + minval);
}
       
Такой вызов присвоит val число от 1 до 10 включительно:
uint val = iRand (1, 10);
 
Пример функции, возвращающей псевдослучайное значение true или false:
boolean randBool ()
{
 return (((u32)rand()& 0x0001)?true:false);
}

А вот так генерится число от 0 до n-1:
rand()%n;

Последнее обновление ( 20.03.2011 )