Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: random, builder 6
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
toweroff
есть задача - получить случайное число
приложение взаимодействует с пользователем, который спорадически нажимает кнопу "запуск"
могу я, используя что-то типа

Код
double start, end;
start = (double) Time();

....

....

end = (double) Time();

end -= start;


получить в end количество миллисекунд между событиями (пусть и с разбросом, не с точностью 1мс) и использовать это значение, как случайное?
aaarrr
А чем rand() не угодил?
toweroff
Цитата(aaarrr @ Jan 31 2011, 02:27) *
А чем rand() не угодил?

да черт его знает... вроде рандомайзлю его, а все равно первые значения практически всегда "кладет" в первую половину промежутка... и с завидной постоянностью
да и все равно - это же один фиг полином считается, а тут вроде как точно случайное число... не нажмет же человек точно до миллисекунды клавишу? а уж тем более разные люди
sigmaN
Цитата
вроде рандомайзлю его, а все равно первые значения практически всегда "кладет" в первую половину промежутка
вы там точно всё по науке рандомайзлите? я не помню принемает ли параметр функция Randomize(); но по науке это виглядит как-то так
http://progs.biz/cpp/cpp/lessons/011.aspx

Вы свою задержку между нажатиями туда можете в srand засунуть, чтоб пнуть полином. Но вообще туда очень хорошо ложится именно значение таймера т.к. два раза запустить программу или функцию в одно и тоже время уж точно ни у кого не получится и на выходе будет "более случайное" число, чем длительность нажатия кнопки(которая всё равно будет что называется "где-то в районе..."и в чистом виде её использовать уж точно не стоит);
baralgin
Попробуйте внешний ГПСЧ, например xor128. В качестве старта можно использовать результат QueryPerformanceCounter. Последняя даёт 64 бита, у xor128 128 бит - два оставшихся(uint32) инициализируем константами (например). Качество такой связки должно быть повыше стандартного генератора и "простого" таймера.
toweroff
Цитата(sigmaN @ Jan 31 2011, 03:42) *
вы там точно всё по науке рандомайзлите? я не помню принемает ли параметр функция Randomize()

вроде как нет, использует системный таймер

Цитата
Вы свою задержку между нажатиями туда можете в srand засунуть, чтоб пнуть полином.

так чтобы первый раз пнуть, нужно флаг вводить -- пинали/не пинали.....

Цитата
в одно и тоже время уж точно ни у кого не получится

там как раз хорошо все, процесс тоже зависит от физических параметров, точно никогда не будет выполняться... да и дядя Вася пока подойдет, удостоверится, заменит "рабочее тело", настройки поменяет, опять "ткнет пальцем"....


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.