![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Насколько случайна 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]Она псевдослучайна
Если да, то как правильно реализовать настоящий и быстрый генератор случайных чисел.
Над этим бьются целые софтварные компании с переменным успехом.