Информация

Обсуждало 12 человек

Опрос от автора

Чтобы принять участие в голосовании, зарегистрируйтесь, пожалуйста!

Как написать генератор псевдослучайных чисел

ActionScript 1.0/2.0
08 апреля 2013 в 12:29:15

Инструкция для нубов!

Условные обозначения:
х - любое число;


Генератор псевдослучайных чисел - нужная вещь в программировании, например, для написания генератора паролей. Сегодня я хочу показать несколько способов генерации чисел.

Способ 1:
Существует функция random(x), генерирующая число в диапазоне от 0 до x-1 (где х - аргумент функции random() ). Почему х-1? Давайте выясним:
В жизни счёт идёт с единицы, но в программировании счёт идёт с нуля. То есть, код:
trace( random(2) ); // никогда не выдаст 2

при компиляции, в окне Output выдаст 0 или 1, но в любом случае увидеть там 2 не получится.

Способ 2:
Но сгенерировать псевдослучайное число в том же самом диапазоне мы можем и другим методом:
Math.random() * x

Но такой метод выдаёт нам дробное число. Как же сгенерировать целое число таким способом?
Для этого есть функция int() (округление числа).
Пример использования int() вместе с Math.random() * x:
trace( int(Math.random() * 5) ); // на выходе даст число от 0 до 4


Практика:
Задача: написать программу "Ваше счастливое число" на ActionScript 2.0.
Решение:
var maxnum = 100 + 1; // максимальное значение, которое сможет выдать генератор (в моём случае - 100) trace("Ваше счастливое число - " + random(maxnum)); // на выходе даёт: "Ваше счастливое число - х"

Пояснение кода:
В переменной maxnum я написал: "+ 1" после 100 (выбранное мной число) по причине, описанной выше.
--------------------
Спасибо за внимание!

UPD: Поскольку кое-кто сказал, что приставка "псевдо" тут не нужна, то я объясню, почему числа, полученные таким методом, псевдослучайны.
Во-первых, все функции рандома, которые используют некий источник, с которым проводят ужаснейшие вещи, в *nix, например, источником является счётчик тактов процессора, затем используют LFSR с последующим хешированием выхода через SHA-1. То есть, источник можно сделать фиксированным(но только с помощью программного вмешательства в код генератора, таки да), и тогда на выводе получится одно и то же число. Истинно случайные числа получаются с помощью физических шумов. Теоретически, случайное число можно получить даже из космического шума.

Обновлено: 11 сентября 2013 в 09:38:47

Обсуждение (вниз)

12
Загружаем страницу...

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

24 декабря 2014 в 12:23:07

наверно не получится, ведь каждое следующее число рассчитывается по параметрам предыдущего. Только если подставить параметры от 14-го числа и запустить генератор, по идее должно получиться 15-е. И тогда можно сделать как в видео - через каждые 100 чисел, например, ключевой кадр. Который где-то сохраняется, и потом рассчёт идёт не сначала, а от него.