Re[3]: Pseudo - Random
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.05.17 05:42
Оценка:
Здравствуйте, CEMb, Вы писали:

N>>Там многие линейные, и это не так плохо, как кажется.


CEM>У меня с ним возникла такая проблема: есть "линейка" объектов, каждый раз обращаясь к определённому элементу мне нужно вычислить для него один и тот же рандом в зависимости от seed-а. Попытался написать свою функцию, просто из головы, большими числами, xor-ами, остатками и так далее. Заметил, что если по линейке к зерну прибавлять единицу (т.е. зерно для каждого элемента: индекс + базовое_зерно), то часто получаются повторения или схожести. Грешил на функцию (и правильно делал), игрался с числами, игрался со сдвигами между индексом элемента и зерном(умножал зерно на число), а потом просто подставил штатный rand и удивился... там, если зерно подставлять 0, 1, 2, 3... числа у меня после отсечения по модулю идут примерно как x*k + c.


Верно, они так и пойдут. Более того, это свойственно чуть ли не всем подобным алгоритмам предсказуемых ГПСЧ, даже самым продвинутым. Но после первых нескольких значений, сгенерированных без смены зерна, видимая предсказуемость теряется.

Попробуйте применить какой-то иной подход. Например, можно взять один такой генератор для фиксированного стартового зерна, пропустить значений 10 и последующие брать уже как целевые зёрна.
Или представления ряда последовательных чисел пропустить через что-то вроде md5 и уже его выход использовать для инициализации целевого генератора.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.