Подтвердить что ты не робот

Воспроизводимость java псевдослучайных чисел в системах и версиях?

Мне нужно создать управляемую последовательность псевдослучайных чисел, учитывая начальный целочисленный параметр. Для этого я использую стандартный класс Java Random, засеянный целочисленным параметром. Я хотел бы убедиться, что в обозримом будущем я буду генерировать одну и ту же последовательность в разных системах (операционная система, а также версия Java/JDK).

Вкратце: обеспечивает ли Java воспроизводимость/переносимость генератора псевдослучайных чисел в реализации и версиях?

Примечание. Я спросил тот же самый вопрос для Python. Я изменил язык реализации на Java, но по другим причинам.

4b9b3361

Ответ 1

Да.

javadoc объясняет:

Экземпляр этого класса используется для генерации потока псевдослучайных чисел. Класс использует 48-битное семя, которое модифицируется с использованием линейной конгруэнтной формулы. (См. Дональд Кнут, "Искусство программирования", том 2, раздел 3.2.1.)

Если два экземпляра Random создаются с тем же самым семенем, и для каждой из них производится одна и та же последовательность вызовов методов, они будут генерировать и возвращать идентичные последовательности чисел.. Чтобы гарантировать это свойство, определенные алгоритмы заданы для класса Random. Реализации Java должны использовать все алгоритмы, показанные здесь для class Random, для абсолютной мобильности Java-кода. Однако подклассам class Random разрешено использовать другие алгоритмы, если они соответствуют общим контрактам для всех методов.