Страницы

Поиск по вопросам

среда, 15 апреля 2020 г.

Как сделать генератор случайных чисел, выдающий одинаковые значения при нескольких запусках?

#javascript #алгоритм #случайные_числа

                    
Посоветуйте, как сделать псевдослучайный генератор, иницилизирующийся числом, с помощью
которого можно сгенерировать последовательность чисел (несколько тысяч чисел от 0 до
9). Основная задача чтобы при запуске этого же генератора с таким же числом инициализации
он выдавал те же самые значения.    


Ответы

Ответ 1



Простейший вариант: var num; // очень большое простое число. var seed; // затравка - то самое инициализирующее число. var start_number; // основа var counts = new Array(); var max_num = 10; // Инт, который не превосходит наше число. У вас 0-9 числа. for(var i=0; i<1000; i++){ counts[i] = (Math.pow(start_number+i,seed)%num)%max_num; } Механизм простой: возводим основу, изменяемую каунтером в степень затравки и берем остаток от деления на большое число. Потом берем последние несколько цифр(в нашем случае - одну). Как можно оптимизировать: бинарное возведение в степень(пользуясь тем, что у нас кольцо) Замечания: 1) num должен быть достаточно большим, чтобы обеспечить разнообразие. 2) число в степени затравки должно, тем не менее, превосходить это простое число. 3) от основы можно отказаться вовсе, если счет инкрементора начинать с 2, а seed взять, хотя бы, от ~20

Ответ 2



И ведь не надоедает людям изобретать не то что велосипеды, но даже лапти... Линейный конгруэнтный метод.

Ответ 3



Вопрос успешно обсуждался на оригинальном SO: https://stackoverflow.com/questions/424292/how-to-create-my-own-javascript-random-number-generator-that-i-can-also-set-the-s

Комментариев нет:

Отправить комментарий