Автор
|
Тема: Как мне НОРМАЛЬНО генерить случайные числа?!
|
Vovan |
опубликован 27-12-2001 21:09 MSK
Как мне нормально генерить случайные числа?! А то rand() почему-то выдаёт далеко не случайные числа, и при повторном запуске комбинация случайных чисел повторяеться один в один! Почему так не пойму, пожалуйста обьясните!
|
server_mouse
|
опубликован 27-12-2001 22:02 MSK
Может попробуй это http://www.sources.ru/NonCGI/Forum5/HTML/000083.html |
SUnteXx
|
опубликован 28-12-2001 00:07 MSK
Добавь в прогу строку типа: "srand( (unsigned)time( NULL ) );", должно заработать! |
Oval
|
опубликован 28-12-2001 07:06 MSK
http://www.intel.com/design/chipsets/manuals/298029.pdf?iid=PCG+devside& |
Romshtein
|
опубликован 28-12-2001 14:19 MSK
Еще есть вариант Используя тек. время: CTime t=CTime::GetCurrentTime(); int km=int(rand()-sqrt(rand()))+t.GetSecond()-t.GetMinute()+t.GetHour()); for(int i=-1;i<=km;i++) rand();извращенно,но работает.
|
purpe
|
опубликован 28-12-2001 15:18 MSK
поддерживаю SUnteXx! а использование тек. времени, это действительно извращение :)
|
Flex Ferrum
|
опубликован 28-12-2001 15:31 MSK
К тому же не стоит так кипятиться по поводу того, что при одинаковом инициализирующем числе генератор ПСЧ генерирует одну и туже последовательность - иногда это можно очень эффективно использовать. |
Valery
|
опубликован 28-12-2001 19:32 MSK
2Oval: Посмотрел эту ссылочку. Ну и лажу интеля придумали :( |
Oval
|
опубликован 29-12-2001 05:58 MSK
Почему? :)) |
Valery
|
опубликован 29-12-2001 08:48 MSK
Рекомендованное время выборки 1 байта не меньше 4,5 миллисекунд. Могли бы и пошустрее придумать, за это время можно даже достаточно качественную ПСП получить, с очень большой претензией на случайность. |
Valery
|
опубликован 29-12-2001 08:53 MSK
Да еще с достаточно жесткими ограничениями на многопотоковость, рекомендуют работу с регистрами СЧ производить в критических секциях. То есть в критической секции будешь _ждать_ когда бит готовности установится в 1. Фигня. Сорри, редко бываю столь категоричным. |
Oval
|
опубликован 29-12-2001 10:16 MSK
2Valery Для реалтайм приложений и впрвду медленновато ждать. Хотя можно по таймеру запрашивать с чуть большим временем чем 4мс. Я еще не сильно с ним разбирался. |
Oval
|
опубликован 29-12-2001 10:34 MSK
Писать по таймеру в циклический буфер, а приложение(в моем случае VSTi плагин) будет выбирать из него со своей скоростью. Конечно генератор будет не поспевать за плагином. Но можно допустим сделать хитрый алгоритм - буфер 256 байт, а текущее значение кроме того и указатель на следующее число в буфере для выборки. Вообще-то мне надо не байт а четыре то бишь float. Но должно и это получится. С Новым Годом! |