Консультация № 66424
10.12.2006, 23:19
0.00 руб.
0 3 2
Доброго времени суток, господа!

У меня такой вопрос, програмирую я в VC 2005, консоль.

Нужно получить случайное число из довольного малого диапазона (1-3) за довольно быстрое время, т.е. перебирать циклом через rand(); довольно накдално, так надо получать это слкчанеоч число раз в 2-3к милисекунд ( точно не помню, время исчисляеться GetTickCount();). Находил довольно много вариантов, но они либо довольно емкие по времени, либо под борланд.

Вот вопрос.

Как можно получить (псевдо) случайное число в довольно малом диапазоне в VC 2005?

Обсуждение

Неизвестный
11.12.2006, 01:16
общий
это ответ
Здравствуйте, Desruptor!

Не понимаю, в чём проблема...
Числа в диапазоне 0..N вполне успешно генерируются формулой

rand()%N

Она может иметь _очень_ слабую неравномерность распределения, если N не является степенью двойки.

А "перебирать циклом через rand()" - это как?
Неизвестный
11.12.2006, 02:03
общий
это через то место на котором люди сидят.do{r=rand();} while (r<N)
Неизвестный
11.12.2006, 10:07
общий
это ответ
Здравствуйте, Desruptor!

Процедура из приложения будет иметь на 1Ггц процессоре время выполнения не больше 10^-7сек...

Приложение:
unsigned short RND3(){ asm { rdtsc mul al shl ax,4 shr ax,8 mov dl,3 div dl inc ah shr ax,8 } }
Форма ответа