Часть полного текста документа:Старый взгляд на новые вещи Эта статья не даёт ответов - она лишь ставит вопросы. Здесь вы не найдёте инструкций для выполнения - лишь указано направление. Нет уверенности, что вам вообще нужно её читать. " Мы никогда не понимаем, какие сокровища перед нами. Знаешь почему? Потому что люди вообще не верят в сокровища." Пауло Коэльо "Алхимик" Оглянитесь вокруг и вы поймёте, что миром правят случайности - они везде и всюду: от шума в радиоприёмнике, до игры в орлянку и карт Таро, от русской рулетки и до ... генерирования паролей. И ведь не известно, что более опасно. Просто удивительно насколько вся наша цивилизация (от крупного IT-специалиста, до простого крестьянина) зависит от разного рода случайностей. А что самое забавное (и таинственное) мы сами ставим себя в зависимость от каких-то генераторов случайных чисел (ГСЧ)(random number generator). Причём к огромному сожалению отнюдь не все ГСЧ являются действительно случайными. Взгляните хотя бы на популярную функцию rand() из стандартной библиотеки stdlib.h - её обманчивое поведение подробно рассматривается в статье "Укрощение rand() и random()". На первый взгляд звучит очень забавно, что на случайные числа даже накладывают ГОСТ-ы. Как же вообще получают эти замечательные числа? Существуют следующие способы получения случайных чисел: 1. Аппаратный способ. Можно использовать специальные приставки - генераторы(датчики) случайных чисел. Этот способ не требует дополнительных вычислительных операций ЭВМ по выработке случайных чисел, а необходима только операция обращения ко внешнему устройству(датчику). В качестве физических эффектов лежащих в основе таких генераторов могут быть использованы шумы в электронных и полупроводниковых приборах(обусловлены следующим: тепловыми флуктуациями, случайными вариациями числа частиц в электронных потоках, хаотическим перемагничиванием доменов в ферромагнитных сердечниках), явление распада радиоактивных элементов. 2. Табличный способ. Случайные числа, оформленные в виде таблицы, помещаются во внешнюю или оперативную память ЭВМ. Запас чисел ограничен. Эффективно использовать только для сравнительно небольших таблиц, т.к. массив занимает некоторый объём оперативной памяти! 3. Алгоритмический способ. Формирование случайных (вернее - псевдослучайных) чисел с помощью специальных алгоритмов. На генерацию псевдослучайных чисел затрачивается машинное время. Ниже приведены примеры алгоритмического получения случайных чисел: Одной из исторически первых процедур получения псевдослучайных чисел была процедура, называемая метод серединных квадратов. Пусть имеется 2n-разрядное число, меньшее 1. Возведём его в квадрат, а затем отберём средние 2n-разрядов, которые и будут являться очередным числом псевдослучйной последовательности. Пример: x0=0.2152 x0^2=0.04631104 x1=0.6311 x1^2=0.39828721 x2=0.8287 ... Главный недостаток этого метода - наличие корреляции между числами последовательности, а иногда случайность может отсутствовать вовсе. Пример: x0=0.4500 x0^2=0.20250000 x1=0.2500 x1^2=0.06250000 x2=0.2500 ... Другой широко применяемый тип генераторов случайных чисел -это так называемые конгруэнтные генераторы. Для генерации используется следующая рекуррентная последовательность: X(n+1)=a*X(n)+c*(mod M). a называется мультипликатором, c - инкрементом, M - модулем. ............ |