Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Насколько случайна Random


starter ©   (2004-11-11 10:20:00) 

Помню раньше где проскакивала инфа, что функция random на самом деле не случайна, что-то типа в длительном цикле вызов randomize и random выстраиваются в повторяющуюся последовательность. Это в самом деле так? Если да, то как правильно реализовать настоящий и быстрый генератор случайных чисел.


wnew   (2004-11-11 13:07:00) [1]

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


Jeer   (2004-11-11 12:52:00) [2]

starter   (11.11.04 11:18) [6]

>ага, значит таки для чистоты случайности имеет смысл randomize вызывать внутри цикла

Нет, качество генератора определятся совсем другими параметрами.
Для увеличения длины псевдослучайной последовательности целесообразно использовать генератор с большим числом состояний.


TUser   (2004-11-11 11:23:00) [3]


> Пытаюсь вот разобраться, стоит ли искать другую реализацию
> random?

Для серьезных вещей (типа генерации паролей) - безусловно. Для фигни - годится и Random. См. 3й том Кнута (или 2й - не помню), там много хорошего написано.


starter   (2004-11-11 11:18:00) [4]

ага, значит таки для чистоты случайности имеет смысл randomize вызывать внутри цикла. Но у меня критично по скорости, программа расчетная, если интерсно посмотрите http://optytrace.100free.com.Пытаюсь вот разобраться, стоит ли искать другую реализацию random?


Smithson   (2004-11-11 10:56:00) [5]

Ramdomize задает "случайным образом" первый элемент последовательности, которую потом генерит Random.
То есть Random есть просто некая хитрая функция, которая из опорного числа и входного параметра генерит другое число. Если Randomize не использовать, то генерируемая последовательность будет всегда одна и та же.
Randomize задает "случайным образом" это самое значение опорного числа. Причем делать это можно чаще, чем раз в жизни, надо просто понимать, что делаешь. "Случайным образом" означает, что некий алгоритм все же есть, но предугадать или воспроизвести его сложно. Скорее всего, в качестве опорного числа ставиться число милисекунд после включения компьютера, или число тактов процессора, или еще что-то сложноповторяемое.

Теперь, глядя на свой алгоритм и прочитав это, реши, как часто тебе надо вызывать Randomize.


Reindeer Moss Eater   (2004-11-11 10:51:00) [6]

На время существования процесса распространяется


starter   (2004-11-11 10:49:00) [7]

про Randomize я в курсе что до цикла надо, но непонятки все равно имеются. Допустим есть бесконечный цикл, длится может часами/сутками, пока юзер не прервет, в нем иногда в зависимости от ситуации вызывается Random, т.е. не в каждом шаге цикла. Тогда в данном случае когда вызывать Randomize, до входа в бесконечный цикл? Т.е. на сколько далеко распространяется действие randomize в кодовом и временном измерениях?


Семен Сорокин   (2004-11-11 10:23:00) [8]

дык, randomize в цикле вызывать не надо, его один раз нужно вызвать - при запуске.

From Help:

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.


Reindeer Moss Eater   (2004-11-11 10:23:00) [9]

Она псевдослучайна

Если да, то как правильно реализовать настоящий и быстрый генератор случайных чисел.

Над этим бьются целые софтварные компании с переменным успехом.


Наверх

Титульная страница Поиск, карта сайта Написать письмо