Случайные числа

 
Господа, подскажите, пожалуйста, алгоритм для функции возвращающей случайное число в заданном диапазоне. Max и min диапазона должны передаваться в качестве параметров функции.
Что-то никак не придумаю от чего даже оттолкнуться :(
 
int MathRandRange(int min, int max)
{
    return (MathRand() / 32768. * (max - min + 1) + min);
}
 
Большое спасибо!
То что нужно!
 
Хочу ещё вот что спросить.
Какова роль точки после числа 32768 ?
В документации ничего не смог найти по этому поводу, а без этого не до конца понимаю принцип работы.
 

Вообще-то нужно писать 32768.0 и означает, что число это не int, а double. Иначе будет целочисленное деление, что сильно отличается от нормального.

 
int MathRand( )

Функция возвращает псевдослучайное целое число в дипазоне от 0 до 32767.

32768. имеет тип double. Без этой точки результат деления будет всегда 0, т.к. меньшее целое число делится на большее. См. в документации и на форуме о неявном приведении типов.
 
Всем спасибо.
Сбило с толку отсутствие ноля.
 
Только будте осторожнее с этой функцией.
Результат может быть неожиданным - разные числа будут иметь разные вероятности, а некоторые могут не выпадать вообще.

Почему?
Лень писать второй раз.
Подробный комментарий сожрал форум.
 
Mak писал (а): Подробный комментарий сожрал форум.
По каким ключевым словам твой коммент можно найти? Качество функции для меня действительно критично.

Функция, по комментарию stringo в 'Вопрос от новичка: две кривые в разных окнах' , является оберткой стандартной Сишной из CRT. Лично мне этот генератор пока нравится, распределение вполне равномерное.
 
Возможно, Маk имел ввиду не функцию MathRand( ), а функцию приведенную выше?
А проблемы, возможные при использовании, скорее всего связаны с тем что мы загоням числа в диапазон значений.
 
Попробую привести пример.
Возьмём значения min=1, max=100.
return (MathRand() / 32768. * (max - min + 1) + min);
Если MathRand() вернёт, например, 1, то то функция вернёт тоже 1.
Если MathRand() вернёт 50, то функция вернёт всёравно 1. И будет возвращать единицу для любых значений MathRand() от 1 до, примерно, 330. Далее будет возвращаться уже двойка. И т.д.
Генератор то и хороший, но в данной функции распределение получается совершенно другим.
Причина обращения: