Помощь - Поиск - Пользователи - Календарь
Полная версия: Период генератора случ. чисел
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Alopl22
Чему равен период генератора случайных чисел?
klem4
Цитата(Pascal Help)

Declaration:
function Random [ (Range: Word) ]: Some type as parametr
// ...
Returl Value: A Word random number within range 0 <= X < Range


Если ты об этом ...
Alopl22
Цитата(klem4 @ 24.12.2006 21:41) *

Если ты об этом ...

Нет. Это количество генерируемых чисел, когда начинается повторение генерируемых чисел.
Michael_Rybak
Так это зависит от генератора. В хорошем генераторе такого периода вообще быть не должно.
Altair
Цитата
Это количество генерируемых чисел, когда начинается повторение генерируемых чисел

Поподробнее пожалуйста!
Первое повторение числа, которое уже было?
Так оно зависит от диапазона чисел...
Malice
Цитата(Altair @ 26.12.2006 13:08) *

Поподробнее пожалуйста!
Первое повторение числа, которое уже было?
Так оно зависит от диапазона чисел...

Нет, когда вся последовательность начинает повторяться. По идее такой период есть и как минимум должен равнятся разрядности числа seed, которым инициализируется этот рандом..
Ps Накатал небольшую прогу для проверки - период не нашел smile.gif
Altair
Цитата
Нет, когда вся последовательность начинает повторяться
Да не будет она повторяться, генератор случ. чисел на таймере времени работает!
Malice
Цитата(Altair @ 27.12.2006 7:27) *

Да не будет она повторяться, генератор случ. чисел на таймере времени работает!

smile.gif
Т.е. если часто-часто вызывать random, то числа подряд пойдут ? И чего они тогда повторяются без randomize ?
Ладно отвечу smile.gif Генератор работает так:
randomNext=f(randomPrev), т.е. следующее число зависит от предыдущего. Без randomize генератор инициализируется нулем (попробуй Writeln (Randseed) поставь), поэтому числа без randomize получаются одинаковые. Если в начале поставить RandSeed=1, например, то числа будут тоже одинаковые, но другие.
Randomize делает RandSeed=Timer. Вот. Исходя из того, что тип RandSeed- Longint, можно сделать вывод, что период=$FFFFFFFF.

Вот еще примерчик:
for i:=1 to 20 do write (random (100),' ');
writeln;
randseed:=870078620;
for i:=1 to 10 do write (random (100),' ');

Вторая группа чисел начнет повторять первую с 5-го числа.
SKVOZNJAK
Цитата(Altair @ 27.12.2006 4:27) *

Да не будет она повторяться, генератор случ. чисел на таймере времени работает!

Этот вопрос будет возникать вновь и вновь, из за СИ. На игровом форуме сишники разбирались, от чего зависит рандом на сервере. Вопрос важный, шанс выпадения ценных вещей зависит от работы генератора случайных чисел. Самое весёлое, на СИ для генератора случайных чисел имеется библиотека, и из неё эти числа каким-то способом достаются. Через какое-то время случайные числа действительно идут по кругу.
Altair
Malice, суть все равно в таймере!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.