Начальное значение и воспроизводимость вывода
Генератор хранит закрытое начальное значение и заменяет его при каждом вызове, но с того же значения выдает ту же последовательность.
Как генератор с состоянием может менять значение при каждом вызове, но при этом в точности повторять последовательность?
- Рассмотрение текущего значения seed как отдельной закрытой изменяемой ячейки
- Отслеживание рекуррентного соотношения от одного сгенерированного значения к следующему
- Различение детерминированной псевдослучайности и внешней случайности
- Воспроизведение последовательности путем создания генератора с тем же значением seed
Процедура make-rand замыкает связывание seed. Каждый вызов умножает текущее значение на 48271, берет остаток по модулю 2147483647, сохраняет этот результат обратно в seed и возвращает его. Поэтому следующий вызов начинается со значения, полученного при предыдущем вызове.
Рекуррентное соотношение является детерминированным. Два раздельно созданных генератора начинают работу с закрытыми ячейками, однако одинаковые начальные значения seed делают их последовательности значений одинаковыми. Этот генератор урока делает состояние и воспроизводимость непосредственно наблюдаемыми.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Первая программа возвращает (48271 182605794 1291394886 1914720637 2078669041). Вторая программа возвращает (337897 1278240558 337897 1278240558).
Найдите каждый set! для захваченного seed и проследите за сохраненным результатом до следующего вызова. Во второй программе разделите два окружения замыканий, даже если их первое и второе значения совпадают.
Измените программу и сравните результат.
Измените значение seed только у правого генератора с 7 на 8. Предскажите, какие позиции все еще могут совпасть, перед запуском программы.
Показать подсказку
Два генератора имеют независимые ячейки. Одинаковые рекуррентные соотношения воспроизводят последовательность только тогда, когда их начальные значения seed равны.