| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Функция random
27.02.2014, 00:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Помощь молодому пацану, кто чем может >:<)=
Сообщение от @ndre
|
Может кто подскажет как решить?
Спасибо.
|
Если пофиг на то, что будет повторяемость, бери стандартный алгоритм генерирования rand() (в педивикии найдешь, какое число нужно к первоначальному прибавлять в зависимости от желаемой длины числа в байтах).
Если не пофиг, но "достоверной случайности" не надо, можешь фликкер-шум какой-нибудь усиливать, снимать АЦП и использовать для srand.
Я когда-то (еще в школе когда учился, ходил на УПК по радиоэлектронике) делал какую-то элементарную фигнюшку: что-то вроде транзистора, к базе которого подключалась металлическая пластинка. Дотронешься — через транзистор течет какой-то ток, который после усиления можно использовать для чего-нибудь (у меня, кажись, использовалось для генерирования звукового сигнала случайной продолжительности, а ты можешь на АЦП подать и инициализировать srand() ).
А может даже тупо шума с открытого входа АЦП хватит: поднакопить его немножко, да проинициализировать алгебраический ГСЧ.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
27.02.2014, 12:47
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Функция random
думаю если несколько рандомов запускать по разным таймерам, а потом суммировать это всё в одну переменную то получиться наверно что-то подобное "не повторяемое". Если тип int то положительных 32767 значений - значит каждые 32 тысячи будет повторяемость точно )) Да, и запуск таймеров тех теж на рандом повесить. Чтоб не мудрить с дорожками АЦП и т.д. Как вариант...
|
|
|
|
27.02.2014, 12:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Функция random
Сообщение от ut1wpr
|
|
И имеешь удовольствие при каждом запуске программы иметь абсолютно одинаковые последовательности повторений. Надо бы еще кое-чего сделать..
|
Вроде в хелпе написано что srand имеет не повторяемые значения. Незнаю, не буду утверждать. Я бы повесил счетчик для проверки его. 32000 генераций рандомов, писать их в массив и проверять. Много памяти, долго но раз проверить и успокоиться ))
Последний раз редактировалось miwutka; 27.02.2014 в 12:51.
Причина: если оно из 32000 генераций повториться раз 5-20 и это устроит то вперед.
|
|
|
|
27.02.2014, 13:14
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Функция random
Инициализация генератора то есть?
А то через stdlib это вот так делается;
/* prints a random number in the range 0 to 99 */
int main(void)
{
randomize();
printf("Random number in the 0-99 range: %d\n", random (100));
return 0;
}
На худой конец можно можно взять текущее время (или содержимое ОЗУ почитать, по включению питания оно то будет случайным) , и соорудить из полученных данных некое число N;
Далее while(N--)random();
Вот и будет псевдослучайное начало генератора.
|
|
|
|
27.02.2014, 13:22
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Функция random
Сообщение от miwutka
|
|
Я бы повесил счетчик для проверки его. 32000 генераций рандомов, писать их в массив и проверять. Много памяти, долго но раз проверить и успокоиться ))
|
Проверять на что и чем?
|
|
|
|
27.02.2014, 15:14
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Функция random
Сообщение от Boba_spb
|
|
Проверять на что и чем?
|
чем, чем - микрухой )) а на что - на то, на сколько они случайны и повторяемы.
|
|
|
|
27.02.2014, 15:23
|
|
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
Re: Функция random
Пример использования функций rand(); и srand();
Значение функции rand(); присваивается переменной FCV_RND = rand(); и выводится на ЖКИ, смещение задается srand(TCNT0);
Это без всяких заморочек, вместо значений TCNT0 можно использовать любой "шум"... который автору на данный момент не нужен...
|
|
|
|
27.02.2014, 15:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Функция random
Сообщение от miwutka
|
|
чем, чем - микрухой )) а на что - на то, на сколько они случайны и повторяемы.
|
И где ж такую микруху достать, которая так легко определяет насколько "случайны" последовательности.
Видать эт спецпроцессор для решения задач теории веорятностей.
|
|
|
|
27.02.2014, 21:48
|
|
|
Частый гость
Регистрация: 20.01.2014
Сообщений: 17
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Функция random
ВСЕМ СПАСИБО!
Изучаю вопрос.
|
|
|
|
27.02.2014, 21:54
|
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
|
Re: Функция random
Сообщение от Boba_spb
|
|
Видать эт спецпроцессор для решения задач теории веорятностей.
|
Можно обработать на большом брате. Накидать ему через СОМ - и пускай трудится.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:25.
|
|