В Си это дело определяется следующими вещами:
int rand(void) - генератор
void srand(unsigned int) - стартовая точка
RAND_MAX - конечная точка
как задать конечную точку в рантайме?
я вот так сделал:
int yrandom(int minval, int maxval)
{
int tmp;
if (!minval) minval=1;
if (!maxval) maxval=1;
srand(minval);
tmp = (maxval * rand()/RAND_MAX);
qDebug() << "maxval=" << maxval
<< "minval=" << minval
<< "tmp=" << tmp;
return tmp;
}
А ты уверен что это будет нормальное распределение?.. мозги пухнут (конец рабочего дня) - немогу понять.
ну во первых диапазон 99% будет ограниченным, а во вторых можно к примеру делать
return srand(RAND_MAX)*srand(RAND_MAX)*srand(RAND_MAX)
Народ, вы чего! Идите в help/man/google и читайте про то, что такое rand и srand.
rand - генератор псевдослучайной последовательности от 0 до RAND_MAX
Это значит, что он на основе некоторого текущего числа вычисляет следующее. При этом вычисленное число становится текущим.
srand - явно устанавливает текущее.
Т.е. код функция
int myrand() {
srand(5);
return rand();
}
Главное не забыть один небольшой момент - rand() возвращает целое число. соответственно выражение rand()/RAND_MAX вернет _целое_ число (т.е. 0) Так что тут нужно явное преобразование типов: double(rand())/RAND_MAX
P.S. По крайней мере у меня так было с gcc 4.2.1, может сейчас что и изменилоcь
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)