| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Генератор равномерного распределения[0,1] не rand |
| Автор: SlHunter 8.12.2007, 14:07 |
| Здравствуйте! Хотелось бы увидеть реализации хороших равномерных датчиков случайных чисел. Скорость абсолютно не важна, вожно качество, на данный момент я посмотрел 3 датчика: •cтандартный rand(), т.е линейный конгруэнтный метод, он меня не устраивает совсем )); •метод Фибоначчи с запаздываниями, который мне не понравился, т.к. его последовательность очень зависимая, ну может быть я накасячил с реализацией; •ну и метод XorShift, на котором в данный момент остановился. Датчик нужен для генерирования других распределений, поэтому хотелось что бы он имел хорошее распределение. Кто интересовался данным вопросом прошу помочь. Интересуют именно реализации датчиков на С или С++. P.S. Википедию читал всё, что там есть по датчикам, если будете советовать книги, то пожалуйста только те что можно достать в электронном виде. P.P.S. форум вроде тоже перечитал интересующего меня ничего не нашёл, только ссылки на Кнута, которого я к сожалению не могу найти. |
| Автор: archimed7592 8.12.2007, 15:20 |
| SlHunter, если нужен качественный генератор, то советую присмотреться к http://boost.org/libs/random/index.html. Есть ещё один момент: если нужны именно случайные числа(а не псевдо случайные), то тебе понадобится аппаратный генератор этих самых чисел. |
| Автор: W4FhLF 8.12.2007, 15:32 |
| http://en.wikipedia.org/wiki/List_of_random_number_generators |
| Автор: SaDFromSpb 8.12.2007, 15:41 |
| SlHunter, еще на RSDN мутили проект качественного генератора. Можешь глянуть у них в списке проектов. Хотя, когда я его там увидел, до реализации дело не дошло еще =) |
| Автор: SlHunter 8.12.2007, 15:57 |
| archimed7592, Нет абсолютно случайные числа не нужны, наоборот желательно, что бы опыт можно было повторить взяв то же самое начальное число, за Boost.Random спасибо, но желательны исходники, причём такие что б более менее понятные, вроде там нет, или я их ещё не нашёл щас поищу по внимательнее. Судя по всему генератор может быть либо хорошим и сложным, либо плохим и простым ( .... Boost.Random можно взять для сравнения что ли ) И если судить по моим заниям английского, этот генератор использует метод http://en.wikipedia.org/wiki/Mersenne_twister, с ОЧЕНЬ большим периодом, что-то типа 2^19937. На Википедии есть псевдо код, попробую его. W4FhLF, я же написал, что Википедию читал. SaDFromSpb, а можно ссылки, посмотреть хотя бы их идеи алгоритмов. Может кто знает ещё какие-нибудь алгоритмы, или вдруг кто-то писал свой. |
| Автор: archimed7592 8.12.2007, 16:04 |
| SlHunter, Boost - это набор абсолютно открытых библиотек, с абсолютно открытыми исходниками, и абсолютно без каких-либо ограничений на использование библиотеки/исходников. Boost.Random, как и большинство других библиотек из Boost не требует компиляции(подключил boost/random.hpp пользуйся). Что же касается "нужны понятные исходники", то конечно придётся для начала разобраться с устройством библиотеки, потом проще будет вытащить из многочисленных исходников, те, которые относятся к uniform distribution. Но простыми они тебе в любом случае не покажутся |
| Автор: SlHunter 8.12.2007, 16:28 |
| Ну что ж будем разбираться с этим ) В любом случае пригодитяс, но прошу если у кого, что ещё есть пишите! |
| Автор: W4FhLF 8.12.2007, 16:41 |
Я читал, но подумал, что ты русской ограничился, ибо трудно представить себе задачу, которая требует чего-то большего, чем представлено в англоязычной версии вики. |
| Автор: SlHunter 8.12.2007, 16:49 |
| Ну вдруг там есть не всё, я просто хочу поискать ещё методы, в том числе и самодельные, а так я с тобой согласен моё первое метсо поиска это Википедия. |
| Автор: W4FhLF 8.12.2007, 17:22 |
| Ну если чисто поресерчить, то из нескольких книг по крито, что я прочёл, мне больше всего понравилась "http://oz.by/books/more104287.html", в частности главы "16. Генераторы псевдослучайных последовательностей и потоковые шифры" и "17. Другие потоковые шифры и генераторы истинно случайные последовательностей". В интернете ищется легко. |
| Автор: SlHunter 8.12.2007, 17:49 |
| Спасибо почитаем. Если найду. |
| Автор: shara 19.12.2007, 02:52 |
| в криптографии есть такое понятие как Линейный Рекурентный Регистр (ЛРР) он по начальному заполнению генерит случайную гамму (0 или 1). в инете ссылок незнаю. кому интересно могу так рассказать, буквально на пальцах. |