Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Период генератора случ. чисел

Автор: Alopl22 24.12.2006 23:23

Чему равен период генератора случайных чисел?

Автор: klem4 24.12.2006 23:41

Цитата(Pascal Help)

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


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

Автор: Alopl22 25.12.2006 21:46

Цитата(klem4 @ 24.12.2006 21:41) *

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

Нет. Это количество генерируемых чисел, когда начинается повторение генерируемых чисел.

Автор: Michael_Rybak 25.12.2006 21:50

Так это зависит от генератора. В хорошем генераторе такого периода вообще быть не должно.

Автор: Altair 26.12.2006 17:08

Цитата
Это количество генерируемых чисел, когда начинается повторение генерируемых чисел

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

Автор: Malice 26.12.2006 18:23

Цитата(Altair @ 26.12.2006 13:08) *

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

Нет, когда вся последовательность начинает повторяться. По идее такой период есть и как минимум должен равнятся разрядности числа seed, которым инициализируется этот рандом..
Ps Накатал небольшую прогу для проверки - период не нашел smile.gif

Автор: Altair 27.12.2006 11:27

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

Автор: Malice 27.12.2006 13:38

Цитата(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 30.12.2006 18:57

Цитата(Altair @ 27.12.2006 4:27) *

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

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

Автор: Altair 30.12.2006 20:06

Malice, суть все равно в таймере!