![]() |
|
|
![]()
|
|
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
сабж...
как работают генераторы случайных чисел? |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 2 Всего: 134 |
В гугль.
http://www.google.ru/search?hl=ru&...le&lr= по разному.
Добавлено @ 22:20 псевдо, потому что последовательность таких чисел можно повторить. Грубо говоря
всегда выводит три одинаковых числа, сколько бы раз не запускали. Добавлено @ 22:21 одинаковых не всмысле друг другу равны, а всмысле сколько раз не запускай - одно и то же увидишь Добавлено @ 22:22 Ещё в вику: http://ru.wikipedia.org/wiki/%D0%9F%D1%81%...%81%D0%BB%D0%BE Добавлено @ 22:24 А ещё на http://random.org . И на http://noentropy.net заодно =) -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: нет Всего: 3 |
Вот тема очень похожая - http://forum.vingrad.ru/index.php?showtopic=72959
Что касается моего мнения, то в природе ничего абсолютно случайного нет, как и в компьютерных функциях рандомов. -------------------- people can fly |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
функцией Randomize генерируется страшненькое число как раз Конгруэнтным генератором. После этого по этому числу по некоторому алгоритму считается новое число и тебе выводится.
-------------------- Всем добра |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 2 Всего: 134 |
Хмм. А как же такие вещи как шумы звуковой платы? Навряд ли их можно воспроизвести повторно. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Можно использовать цифры трансцендентного числа
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
слушайте, а можете мне просто привести формулу и значения переменных, чтоб я на собстевнном опыте понял? например:
какнить так, для тупых просто мне нужно самому попробывать, тогда я пойму |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
В одной книжке утверждается, что ниже написанный код используется в библиотеках С++
И помоему эта тема также обсуждалась у Кнута в "Искуствах программирования". Надо будет глянуть. -------------------- Пролетал мимо. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Fin,
а когда нужно выполнять srand()? и что передавать ей в параметр? |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
srand выполняют в самом начале программы, обычно ставят число полученное от часов системы. Это нужно, чтобы сбить последовательность. Иначе последовательность будет повторяться при каждом запуске программы.
-------------------- Пролетал мимо. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Fin,
что ж за генератор такой, который от часов зависит? такой я гораздо проще бы сделал...
только никакой случаности... разве все генераторы числе используют внешний источник СЧ?.. теперь понятнО, почему псевдо... |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
Alx ты совсем неправильно понял мысль
-------------------- СУВ, Partizan. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Вероятность того, что ты запустиш программу в одно и тоже время, вплоть до милисекунды равна 1/(24*60*60*100) Так что, так именно делают в программах. Просто не используют стандартный генератор псевдослучайных чисел.
"Псевдослучайный" - потому что, цифры хоть и распределены по диапазону равномерно, но идут в строгой последовательности. Все генераторы, построенные на математических моделях, имеют цикл повторяемости. Через определенный промежуток запросов к генератору, идет полный повтор комбинации. Кстати, тот алгоритм, что я привел выше, также есть по ссылке, которую показал Romikgy, Это сообщение отредактировал(а) Fin - 24.2.2006, 21:37 -------------------- Пролетал мимо. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Попробуй позапускать несколько раз такой код:
Увидиш, что последовательность чисел не будет повторяться. Если заремить srand(time(0));, то последовательность чисел будет повторяться в каждом запуске программы. -------------------- Пролетал мимо. |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Нет не все! -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
esperant0, Примерчик пожайлуста в студию.
-------------------- Пролетал мимо. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Fin,
а чем твой си-шный пример лучше моего? зачем все эти функции, если можно просто брать текущее время, как случайное число? |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Если у твоего примера последовательно через равный промежуток времени брать запрос, то и получится результат такой же. Т.е. потеряется элемент псевдослучайности.
Твой пример хорош для разовой выемки. Но не для последовательной и целенаправленной. -------------------- Пролетал мимо. |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Пусть генератор выдает последовательно цифры числа пи. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Ты число pi расчитай сначало. Насколько я знаю, один немец недавно дошел до миллиардного знака. Можно конечно и число e считать. Только там факториалы идут в делителе формулы. И получается что формулу сложнее расчитать
-------------------- Пролетал мимо. |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
К вашему сведению, известен способ вычисляющий любую цифру числа пи, не считая ВСЕ предыдущие чифры. Причем формула то не слишком сложная Так что ваше замечание не состоятельно %) Это сообщение отредактировал(а) esperant0 - 25.2.2006, 00:31 -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
блин, ну это же каждый раз будут одни и те же цифры
3, 1, 4, 1, 5, 9, 2, 6, 5... как думаете, можно как-нибудь сделать ГСЧ, основанный на Брауновском движении (беспорядочном движении мельчайших тел)? Это сообщение отредактировал(а) Alx - 25.2.2006, 01:36 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
у компьютера конечная память + конечное количество состояний процессора - это все можно назвать его состоянием количество таких состояний конечно состояние на следующем такте при отсутствии внешних воздействий (как, например, при исполнении какого-то вычислительного алгоритма) будет полностью определяться состоянием на предыдущем а это, в свою очередь, означает, что будет зацикливание максимум через N шагов (N - количество разных состояний системы) Добавлено @ 02:03 другое дело, что количество таких состояний огромно - что-то типа 2^(количество бит в памяти), но принципиально это дела не меняет... -------------------- qqq |
|||
|
||||
| esperant0 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Если период генератора равен Х, а программе нужно количество случайных числел меньшее Х, то периода вроде как и нет. Для примера. Компьютер с 2^40 бит памяти, будет иметь такой огромный период, что мы просто не успеем пройтись по нему. Добавлено @ 10:56
А что вы думаете, в других генераторах при одном и том же сиид, будут разные цифры. Кроме того можно начинать выводить цифры числа начиная с некоторой цифры числа х. Кроме того, не всегда плохо что выдаються одни и те же цифры. Пусть у вас есть программа симуляции, и вы прогоняете ее единожды на цифрах числа пи. Все будет в порядке. В 3-х, кроме числа пи, можно использовать богатое множ-во иррациональных чисел Это сообщение отредактировал(а) esperant0 - 25.2.2006, 10:57 -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
аааа... так неинтересно тогда и нет принципиальных отличий от других генераторов (например, линейных сдвиговых регистров) кроме того если в тех же ЛСР память и процессорное время используется практически оптимально - очень простые операции, то при вычислении цифр иррациональных чисел алгоритмы вряд ли смогут быть проще, а, наверное, будут сложнее... да и есть ли универсальные алгоритмы для большого количества иррациональных чисел? и еще одна проблема, что может иногда требоваться различное количество случайных чисел, а это значит, что и память и время вычисления для каждого следующего числа будут соответственно увеличиваться... -------------------- qqq |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Принципиальное отличие есть. В пи период ограничен возможностью существующих ЭВМ, а в других генераторах он ограничен заранее. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
esperant0, Я хочу попасть в книгу рекордов Гинесса. Поделись пожайлуста алгоритмом вычисления числа Пи. Вычислю вот триллион знаков после запятой. И будет мне счастье. А то немец что то мелочится, всего то миллиард с копейками знаков после запятой.
-------------------- Пролетал мимо. |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
напишите в Гоогле, алгоритм для вычисления цифр числа пи. ( на английском), немного покапайтесь. И будет вам счастье. Я в свое время нашел. Теперь ваша очередь. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Alx |
|
||||||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
а что если взять любое число n, больше 1, а затем поочередно выполнять выражения
? получится бесконечно убывающий поток иррациональных чисел от 1 до 2, какое бы число за основу мы не взяли. попробывал, получается высокая степень случайности: http://soft.flyweb.in/small/rand.html
Добавлено @ 23:15 функция ещё высчитывает однозначное число для каждого значения pi, поочерёдно складывая в нем все цифры, вот так:
Это сообщение отредактировал(а) Alx - 27.2.2006, 01:50 |
||||||
|
|||||||
| Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 4 Всего: 41 |
Не совсем. При условии задания одного и того же начального значения (seek). Псевдо только потому, что через некоторое время последовательность будет повторяться. По опыту могу сказать, что длина последовательности для вещественного числа размером n байт примерно совпадает с числом целых чисел, которые этим числом байт можно представить. Например, датчики float имеют длину ~ MAX_INT. double же очень длинный. Но и не в длине основное дело. Сами числа д.б. независимы. Существует много различных тестов. Обычно по объемы датчики не занимают много место, т.к. должны в первую очередь очень быстро выполняться. По пи скажу, что надо посмотреть, какими характеритиками оболадает такой генератор. К тому же не понятно распределение цифр числа. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |