Программа генерации псевдослучайных чисел конгруэнтным методом mathcad. Генерация случайных чисел. Простые числа Мерсенна

Программа генерации псевдослучайных чисел конгруэнтным методом mathcad. Генерация случайных чисел. Простые числа Мерсенна

Просмотр содержимого документа
«Влияние современных гаджетов в образовательном процессе»

Влияние современных гаджетов в образовательном процессе

Оксана Александровна Шумская

учитель английского языка, МОУ « СОШ №1»,

309996, РФ, г. Валуйки Белгородской области, ул. Толстого , д .10

The influence of modern gadgets in the educational process

Oksana Shumskaya
the teacher of English language, MOU «SOSH №1»,
309996, Russia, Valuiki, Belgorod region, ul. Tolstogo, 10

People in contemporary world can hardly imagine their lives withoutmodern gadgets. Different people appreciate new inventions differently. In spite of all drawbacks, gadgets have, their benefits are much more considerable, as they save people`s time and let them enjoy life. Gadgets make people`s lives easier.

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

Ключевые слова: гаджет, недостатки, новые изобретения, делают нашу жизнь легче, экономить время, достоинства.

Keywords: a gadget, drawback, new inventions, make people`s lives easier save people`s time, benefits.

Образование - это процесс и результат приобщения человека к знаниям, накопленным предшествующими поколениями. В течение многих веков люди учились и развивались. Новые технологии не могли не затронуть сферы образования. В России, сравнительно недавно, стали доступны современные технологии широкому классу населения, поэтому темпы продаж гаджетов с каждым годом всё увеличиваются.

Гаджетом является небольшим устройством, предназначенное для облегчения и усовершенствования жизни человека. Цифровые фотоаппараты, коммуникаторы, планшетные компьютеры, мобильные телефоны, GPS-навигаторы, MP3-плееры, флешки - это самые привычные гаджеты для нас.

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

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

С одной стороны, все эти средства – это дань моде и этот вопрос более актуален в подростковом возрасте, когда ученик стремится занять свое место под солнцем, поэтому навороченный гаджет повышает его в глазах других. К сожалению, моде на высокотехнологичные гаджеты подвластны как дети, так и взрослые люди. С другой стороны, гаджеты развивают логическое мышление и мелкую моторику, тренируется слуховое и зрительное восприятие того, что происходит на экране, у ребенка сосредотачивается внимание.

Многие современные школьники становятся интернет зависимыми. У них появляется потеря интереса к жизни и возникают проблемы с общением в реальной жизни. Часто интернет становится тем местом, где школьник может быть тем, кем хочет, а не тем, кем его видят. Беспокоиться надо начинать, если вы замечаете, что ребёнок не ходит гулять с друзьями, мало общается с семьей и почти не разговаривает по телефону. Но, если круг интересов школьника не сужен до одного только интернета, то и о зависимости говорить рано.[ 2]

А как обстоит дело со здоровьем, если ребёнок не расстаётся со своим гаджетом? Многие родители конечно же наслышаны о вреде здоровью, в том числе и гаджетами. Но какую в действительности угрозу они несут? Первая проблема – это развитие близорукости, вторая – появляется синдром сухого глаза, когда слезная пленка истончается и глаза краснеют. Кроме того, у детей, которые увлекаются компьютерными играми, повышается возбудимость. От любой техники исходит излучение и это может стать причиной серьёзных заболеваний. Поэтому длительное сидение за компьютером и долгая работа с другими гаджетами вредна как ребенку, так и взрослому.

Порой страшно становится за подрастающее поколение, когда видишь на улице компанию детей, где каждый уткнулся в свой телефон. Но если ребёнок будет только прыгать и бегать, он вырастит необразованным. Поэтому родители должны найти баланс в обращении ребенка с техникой. Главное и это касается любого другого вопроса, должна соблюдаться золотая середина и правильный подход. Каждый из родителей, должен выбрать сам, как воспитывать своего ребенка и когда разрешить ему пользоваться гаджетом.

Гаджет открывает широкие возможности для использования очень полезных для развития и учёбы приложений. Это и электронные книги, которые можно использовать и дома, и на уроке. На многих современных мобильных телефонах и смартфонах школьники смогут не только делать видео и фотографии, но и обрабатывать их. Есть приложения, в которых можно рисовать или сочинять музыку, можно установить игры и приложения, которые развивают логическое и пространственное мышление, память и внимание.

В интервью Figaro Madame один из авторов исследования Академии наук Оливье Удэ сказал:
"Цифровые устройства формируют у подрастающего поколения гибкое, быстрое, дробное, автоматическое и многозадачное мышление. В то же время они не лучшим образом отражаются на способностях к синтезу, абстракции и классификации информации. Отсюда возникает риск формирования поверхностного ума. Поэтому нам нужно сохранить неторопливое, линейное, глубокое или даже глубинное мышление, которое сформировало у нас книжная культура с момента изобретения печатного станка, и по-прежнему передавать его детям. Если они смогут совместить одно с другим, то будут творить чудеса."

Мир не стоит на месте. Не стоит забывать, что специальности в сфере информационных технологий не только самые востребованные, но и самые высокооплачиваемые. Возможно, увлечение гаджетами и компьютерами станет не только времяпрепровождением, но и перерастет в будущую профессию. Так зачем ограждать ребенка от технического прогресса? Надо просто научить ребёнка использовать гаджеты правильно и для него откроется новый мир, мир, в котором ему жить.

Список литературы:

1.Протопопова С. В., Макаренко Т. А. Анализ применения гаджетов студентами в образовательном процессе // Научно-методический электронный журнал «Концепт». – 2017. – Т. 32. – С. 264–267. – URL: http://e-koncept.ru/2017/771077.htm.

2. Katz J.E., Rice R.E. Социальные последствия использования Интернета: доступ, участие и взаимодействие. Кембридж, Массачусетс: MIT Press, 2002.

3. Война мобильникам: новости о детях //Здоровье.-2005.-№4.-С.78.

1. Protopopova SV, Makarenko TA Analysis of the use of gadgets by students in the educational process // Scientific and methodical electronic journal "Concept". - 2017. - V. 32. - P. 264-267. - URL: http://e-koncept.ru/2017/771077.htm.

2. Katz J.E., Rice R.E. Social consequences of Internet use: access, involvement, and interaction. Cambridge, Mass.: MIT Press, 2002

3. The War of Mobile Phones: news about children // Zdorove..2005.- №4.-С.78.

Каждый родитель задумывался над вопросом: какой планшет выбрать для ребёнка. Но не все спрашивают себя, с какого возраста можно начинать им пользоваться. Приобщение детей к смартфону или планшету в наше время естественно, но должно быть рациональным и дозированным. Гаджеты являются, с одной стороны, игрушкой, а с другой - средством развития. И дети развиваются в том направлении, которое им предлагают разработчики интерактивных приложений.

Почему планшеты так привлекают детей?

Планшеты привлекательны, поскольку в них заложено удовлетворение потребности в игре. Яркие визуализации, выразительные образы, смена декораций, подвижность предметов, возможность взаимодействовать с героями и образными моделями увлекают малыша и стимулируют познавательную активность. Мышление в период дошкольного детства является наглядно-практическим и только потом переходит к наглядно-образному.

В каком возрасте начинать ими пользоваться?

Начинать пользоваться планшетом лучше с 4-5 лет, хотя многие современные дети знакомятся с ним гораздо раньше. Это не страшно, если взаимодействие с устройством регламентировано взрослыми. Прежде чем дать планшет ребёнку в руки, нужно несколько раз подумать, с какой целью мы это делаем. Родители должны самостоятельно решить, с какого времени позволить ребёнку пользоваться гаджетом, зачем и как долго. Очень важно, чтобы существовало полное согласие между всеми членами семьи насчёт этих правил.

Ни в коем случае нельзя совать гаджет ребенку для того, чтобы он не мешал. Нерегулируемое пользование гаджетами наносит вред. Ребёнок на подсознательном уровне будет ощущать собственную ненужность для родителей. И тогда планшет ему их заменит.

Это самый опасный сценарий, который вырабатывает у ребёнка зависимость.

Даже если вы дали гаджет ребенку в руки, общайтесь с ним!

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

Для детей постарше смартфоны играют более значимую роль. Они помогают адаптироваться в обществе через социальные сети и мессенджеры. Но, опять же, взрослый должен советовать ребёнку то, что ему полезно, и будет помогать в учебе, развитии интеллекта и личностных качеств.

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

Почему важно не запрещать, а объяснять?

Мне понравился случай, который я недавно наблюдала в самолете. Отец рассказывал сыновьям, двойняшкам лет десяти, о правильном использовании смартфона и его альтернативах. Мальчики сказали, что они будут лететь в самолёте и играть в игры.

Отец им ответил, что, во-первых, нельзя на взлёте включать электронное оборудование, а во-вторых, лучше бы им почитать книжку. Чтение лучше развивает интеллект, поскольку задействует другие мозговые структуры, развитие которых потом более позитивно скажется на учёбе. Так отец попытался объяснить детям, что мыслительные процессы, которые активизируются при чтении книги, в данный момент приоритетнее, чем игра на планшете.

Я впервые услышала, чтобы родители объясняли ребёнку, что при чтении мозг выполняет совершенно другие операции, отличные от тех, которые он совершает во время игр.

Это было вполне доступное объяснение. И дети ему вняли. Тут нужно добавить, что чтение книги - несомненно полезное занятие, но и некоторые интерактивные образовательные программы, разработанные с учебными, развивающими целями и осваиваемые только с помощью техники, также позитивно влияют на ребёнка.

Если родители всё время разговаривают с детьми и стараются объяснять свои поступки, то к их мнению прислушиваются. В дальнейшем дети в ситуации выбора сами спрашивают: почему так лучше, почему выгоднее или выигрышнее поступить именно так?

К чему приводит полный запрет гаджетов для ребёнка?

Чем больше запрещаем, тем больше хочется. Разумное объяснение и внятный ответ на вопрос «почему нельзя?» являются лучшими средствами в борьбе с запретами. Многие родители вообще не задумываются над тем, что ребёнка необходимо побуждать самостоятельно отвечать на вопрос «почему нельзя?». Родители часто действуют по принципу «Нельзя. И точка!». А толкового объяснения дети не получают.

«Почему нельзя? Другому можно, а мне нет...»

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

Сотрудничество с ребёнком - наиболее эффективный способ управления его поведением.

Самый действенный метод - когда родители просят ребёнка у самого себя спросить, почему ему что-то запрещают. «Как бы ты сам ответил на этот вопрос?» Это и есть искусство разговаривать с ребенком. Так возникает беседа. Если ребенок чувствует неравнодушное отношение к себе, на подсознательном уровне он делает вывод: «Обо мне заботятся, меня любят, я нужен своим родителям, им интересно со мной».

Сколько времени ребёнок может проводить с планшетом?

К сожалению, существует не так много исследований, которые бы показали точный процент положительного и отрицательного влияния электронных устройств на развитие и здоровье детей разных возрастов. Планшеты используются ежедневно во всём мире и, если бы они были действительно опасны, их бы давно запретили.

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

Будем надеяться, что в следующей редакции СанПиНов для дошкольников такие нормы всё же появятся.

Что касается начальной школы, то в СанПиНах 2010 года указано, сколько времени ребенок может взаимодействовать с электронными продуктами. Ответ - не более 15-20 минут непрерывно. А вот сколько раз за урок можно пользоваться этими предметами с перерывом - на усмотрение преподавателя. Поэтому главный совет - делать регулярные перерывы и следить за усталостью ребёнка.

Какая польза от планшетов и смартфонов?

Гаджеты полезны, если «начинка» оказывает на ребенка развивающее и воспитательное влияние. То, что закладывается внутрь (игры, обучающие программы, книги), оказывает положительное влияние на развитие мышления ребенка, развивает зрительную и образную память, слуховую память, эмоциональную сферу так же, как обычные книги и настольные игры.

Преимущества гаджетов в том, что всё в них ярко, образно, динамично, увлекательно. Часто ребенок чувствует себя непосредственно героем событий, происходящих на экране, он верит в то, что происходит, как когда-то мы верили в волшебные сказки из книг. И психологически это оправданно.

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

Например - раздражать, вызывать негативные эмоции, пробуждать страхи. Психика детей ещё не окрепла, поэтому мы всегда говорим о дозированности использования устройств. Осторожно нужно давать планшеты детям с особенностями развития: детям с синдромом гиперактивности, детям с ослабленным здоровьем, которые склонны быстро утомляться.

Замечу, что гаджеты не всегда способствуют развитию системного мышления у детей. Быстрое перескакивание с кнопки на кнопку, переключение с одного фрагмента на другой формирует так называемое фрагментарное или «кнопочное мышление» - его ещё называют дискретным. Но, когда речь заходит о взаимодействии с образовательными продуктами, тут, наоборот, без системного мышления не обойтись.

Как платформа Учи.ру развивает мышление ребёнка?

Интерактивные курсы «Учи.ру» выстраиваются по учебной программе, которая относится к Федеральному образовательному государственному стандарту. В ней заложен плавный переход от образного к абстрактно-логическому мышлению.

Сначала ребёнок учится математическим действиям на предметах, которые окружают его в жизни. Затем вместо предметов используются предметы-заменители - кубики, шарики, бусины. Всё это помогает наглядно представить математическую ситуацию или математическую задачу. На более высоком уровне абстракции появляются знаки, символы, которые воплощаются в цифрах, формулах, графиках, диаграммах, схемах и чертежах.

Когда ребёнок обозначил, например, четыре шарика цифрой 4 - это первый переход к абстракции.

Помните, как у Мальвины и Буратино? Мальвина ему говорит: «Представьте, что некто дал вам два яблока». А Буратино отвечает: «А мне никто два яблока не давал!». Это пример конкретного мышления. Буратино ещё не способен представить ситуацию мысленно. Первоклассники тоже с трудом это делают. Поэтому сначала их учат считать на конфетах и яблоках, потом на кубиках, счетных палочках. И только потом знакомят с цифрами, математическим выражением и знаками сравнения.

По исследованию психологов, переход от наглядно-действенного и наглядно-образного мышления к абстрактно-логическому начинается около 6-7 лет, в то время, когда ребенок приходит в школу. Это наиболее комфортное время для знакомства с обучающими программами и интерактивной платформой «Учи.ру».

Пусть на планшете ваш ребёнок займется изучением математики, русского языка или окружающего мира. Так он получит больше пользы, чем от сомнительной агрессивной игры.

Но как я могу обеспечить, чтобы все случайные числовые потоки имели это максимальное свойство? Что касается MPI, как мне включить rank и size для создания максимальных периодов с использованием линейного конгруэнтного метода? Было бы проще использовать Lagged Fibonacci или Mersenne Twister для создания более длинных параллельных случайных потоков?

8

4 ответы

Существует очень хорошая обзорная обзорная статья Katzgrabber, Случайные числа в научных вычислениях: введение , в котором я указываю людям, кто хочет быть пользователь PRNG для научных вычислений. Линейные конгруэнтные генераторы бывают быстрыми, но это все, что у них есть для них; у них короткие периоды, и они могут легко ошибиться; вполне разумно выглядящие комбинации a, c и m могут заканчиваться ужасно коррелированными выходами, даже если вы удовлетворяете обычным требованиям между a, c и m.

Хуже того, в одном общем случае, когда m является степенью двух (поэтому операция mod быстро), биты более низкого порядка имеют гораздо более короткий период, чем последовательность в целом, поэтому, если вы выполняете rand ()% N, у вас есть еще более короткий период, чем вы ожидали.

Как правило, генераторы с запаздыванием-фибоначчи, MT и WELL имеют гораздо лучшие свойства, и они все еще довольно быстрые.

С точки зрения посева параллельно метод Джека Поулсона хорош, потому что он дает четко определенную последовательность чисел, равномерно распределенных между процессорами. Если это не имеет значения, вы можете сделать все возможное, чтобы засеять различные ПРНГ; в той же самой статье говорится о том, что многие люди придумали независимость, хешируя номер задачи PID или MPI со временем. Конкретная формула, предложенная там

Long seedgen(void) { long s, seed, pid; pid = getpid(); s = time (&seconds); seed = abs(((s*181)*((pid-83)*359))%104729); return seed; }

У меня нет особых мнений об этой конкретной реализации, но общий подход, безусловно, разумный.

Простая идея для распространения типичного последовательного RNG над приличным количеством потоков состоит в том, чтобы один поток как можно быстрее продвигал семя и отправлял только тысячу или около того семян в память. Затем каждый из ваших других потоков забирает один из этих интервальных ссылочных семян и обрабатывает 1000 значений в этом блоке, то есть снова регенерирует 1000 семян в блоке, генерирует их псевдоресурсные розыгрыши, а затем выполняет любую другую обработку вашей задачи.

Это работает, потому что для RNG, которые не вычисляют все это (LCG, безусловно, один, но многие другие должны быть в этой категории), реальное узкое место отправляет семена в память (а также, возможно, последующую обработку). Если вы запускаете LCG, не отправляя ничего в память, все это должно оставаться в регистрах CPU и быть очень быстрым. Даже для более сложного RNG вы должны оставаться в кеше L1 и быть очень быстрым.

Я использовал этот очень простой подход с LCG, который по старым причинам мы должны сохранить. В основном мы получаем линейное ускорение до потоков 4-8 на типичной многоядерной рабочей станции. Но теперь я попробую метод от ответа Джека Поулсона и надеюсь, что он будет еще быстрее:).

OTOH, я считаю, что этот простой трюк должен работать для других неотъемлемых последовательных ГСЧ.

Следующий большой шаг в разработке генераторов случайных чисел был сделан Д. Лемером (D.H. Lehmer) в 1949 году. Предложенный им генератор носит название линейного конгруэнтного метода (linear congruential method). Выберите три числа т, а и с и начальное число Х0. Для генерации последовательности случайных чисел используется следующая формула:

Хл+і = (аХ„ + с) mod т

Операция взятия по модулю т (mod т) представляет собой вычисление остатка от деления числа на т, например, 24 mod 10 = 4.

При удачном выборе начальных чисел генерируемая последовательность будет содержать случайные числа. Например, стандартный генератор случайных чисел в Delphi использует значения а = 134775813 ($8088405), с = 1 и т = 232, а значение Х0 выбирается самим пользователем. (Значение начального числа содержится в глобальной переменной RandSeed. Его можно задавать напрямую или использовать процедуру Randomize для вычисления его на основе показаний системных часов.) Следует отметить, что если в двух разных точках последовательности получено одно и то же значение х, то последовательность в этих двух точках должна полностью повторяться, поскольку алгоритм детерминированный. Так как в формуле используется операция определения остатка от деления, все значения в последовательности будут меньше га, т.е. будут находиться в диапазоне от 0 до т-1. Следовательно, последовательность будет повторяться после не более чем т чисел. При неудачном выборе значения а, с и т повторение последовательности может начаться гораздо раньше. В качестве простого примера можно привести случай, когда а = 0: вся последовательность сводится к повторению значения параметра с -

Каким образом можно выбрать удачные значения для а, с и ті В литературе содержится немало размышлений, описаний и доказательств. Как правило, значение параметра т выбирается как можно больше, чтобы цикл повторяемости был также как можно большим. Нужно выбирать его, как минимум, равным размеру слова операционной системы (другими словами, для 32-разрядных операционных систем т выбирается равным 31 или 32 бита). Значение параметра а выбирается таким образом, чтобы оно было взаимно простым со значением числа т (два числа являются взаимно простыми, если их наибольший общий делитель равен 1). Значение с, как правило, берется равным 0 или 1, несмотря на то, что общее правило гласит, что должно выбираться ненулевое значение, взаимно простое со значением параметра т.

В случае если значение с равно 0, генератор называется мультипликативным линейным конгруэнтным генератором случайных чисел (multiplicative linear congruential generator). Чтобы гарантировать, что цикл повторения последовательности максимален, необходимо в качестве значения параметра т выбирать простое число. Самым известным генератором подобного рода является так называемый минимальный стандартный генератор случайных чисел (minimal standard random number generator), предложенный Стивеном Парком (Stephen Park) и Кей-том Миллером (Keith Miller) в 1988 году. Для него а = 16807, а т = 2147483647 (или 231 - 1). После разработки этого генератора было проведено большое количество статистических тестов, и генератор прошел большинство из них (несмотря на то что предложенный генератор обладает определенными нежелательными свойствами, которые мы рассмотрим чуть ниже).

Мультипликативные линейные конгруэнтные генераторы случайных чисел имеют одну аномалию: они никогда не дают числа 0. (Это объясняется тем, что, во-первых, т представляет собой простое число, во-вторых, a mod т не равно нулю, и, в-третьих, если начальное число не равно нулю, Х0 mod т тоже не равно нулю.) Следовательно, если генераторы никогда не дают числа 0, их нельзя назвать случайными. На практике невозможность генерации нуля, как правило, игнорируется, - в конце концов, в 32-разрядной операционной системе это всего лишь отсутствие всего одного числа из примерно 2 миллиардов.

При реализации минимального стандартного генератора случайных чисел (как, в общем-то, и любого другого) особое внимание необходимо уделить исключению возможности возникновения переполнения, поскольку значение текущего начального числа, умноженное на а, может легко превысить максимально допустимое значение для 32-битного целого числа. Если не позаботиться об исключении переполнения, возможно возникновение ошибок, которые негативно скажутся на достаточно хорошем генераторе случайных чисел. Для обработки случаев переполнения используется метод Шрейга (Schräge) (его описание в этой книге не приводится, но его можно найти в статье Парка и Миллера ).

Для сравнения и тестирования различных генераторов случайных чисел будет создана иерархия классов, базовый класс которой будет содержать виртуальный метод, инкапсулирующий основные функциональные возможности генератора, в частности, генерация случайного числа с плавающей запятой в диапазоне от 0 до 1 (мы будем пользоваться переменными типа double). Этот виртуальный метод будет перекрываться в дочерних классах, что позволит генерировать случайное число в соответствии с алгоритмами дочерних классов. В базовом классе метод будет применяться для создания других типов случайных чисел, например, случайных чисел целого типа не больше определенного значения или случайного числа из определенного диапазона.

Наличие иерархии классов генераторов случайных чисел дает еще одно преимущество. Поскольку данные для генератора случайных чисел содержатся исключительно внутри самого объекта, в одном приложении можно будет использовать несколько независимых генераторов. Стандартная функция Random имеет одно и только одно начальное значение, которое будет использоваться для всех вызовов функции в приложении. В ситуации, когда несколько различных процедур прибегают к услугам функции Random, очень сложно получить воспроизводимые результаты, поскольку отдельные вызовы будут влиять на получаемые случайные значения.

Листинг 6.2. Базовый класс генератора случайных чисел

Type TtdBasePRNG = class private FName: TtdNameString; protected procedure bError(aErrorCode: integer; const aMethodName: TtdNameString); public function As Double: double; virtual; abstract;

{-вернуть случайное число из диапазона от 0 включительно до 1

Исключительно} function AsLimitedDouble(aLower, aUpper: double) : double; {-вернуть случайное число из диапазона от aLower включительно до aUpper исключительно} function As Integer (aUpper: integer) : integer; {-вернуть случайное число из диапазона от 0 включительно до aUpper исключительно} property Name: TtdNameString read FName write FName; end; function TtdBasePRNG.AsLimitedDouble(aLower, aUpper: double) : double; begin if (aLower < 0.0) or (aUpper < 0.0) or (aLower >= aUpper) then bError(tdeRandRangeError, 1 AsLimitedDouble"); Result:= (AsDouble * (aUpper - aLower)) + aLower; end; function TtdBasePRNG. As Integer (aUpper: integer) : integer; begin if (aUpper <= 0) then bError(tdeRandRangeError, "AsInteger"); Result:= Trunc(AsDouble * aUpper) ; end; procedure TtdBasePRNG. bError (aErrorCode: integers-const aMethodName: TtdNameString); begin raise EtdRandGenException. Create (FmtLoadStr(aErrorCode, )) ; end;

В листинге 6.2 приведен код базового класса генератора случайных чисел. В нем определен виртуальный метод AsDouble, который возвращает случайное число х в диапазоне 0<х< 1. Кроме того, в классе объявлены два простых метода, один из которых возвращает случайное число с плавающей запятой из заданного диапазона значений, а второй - из диапазона значений от 0 до некоторой заданной верхней границы (аналогично тому, как функция Random (Limit) использует целое значение Limit). Теперь, когда базовый класс определен, для реализации алгоритма Парка и Миллера можно объявить дочерний класс.

Листинг 6.3. Минимальный стандартный генератор псевдослучайных чисел

Type TtdMinStandardPRNG = class (TtdBasePRNG) private FSeed: longint; protected procedure msSetSeed(aValue: longint); public constructor Create(aSeed: longint); function AsDouble: double; override; property Seed: longint read FSeed write msSetSeed; end; constructor TtdMinStandardPRNG. Create (aSeed: longint); begin inherited Create; Seed:= aSeed; end;

function TtdMinStandardPRNG.AsDouble: double; const

A = 16807; m = 2147483647; q= 127773; {равно m diva} r = 2836; {равно m mod a} OneOverM: double = 1.0V / 2147483647.0; var k: longint; begin k:= FSeed div q; FSeed:= (a * (FSeed - (k * q))) - (k * r) ; if (FSeed <= 0) then inc(FSeed, m) ; Result:= FSeed * OneOverM; end; function GetTimeAsLong: longint; {$IFDEF Delphi 1} assembler; asm

Call DOS3Call mov ax, cx end; {$ENDIF] {$IFDEF Delph±2Plus) begin Result:= longint(GetTickCount); end; {$ENDIF) {$IFDEF KylixlPlus) var T: TTime_t; begin _time(@T); Result:= longint(T); end;

{$ENDIF) procedure TtdMinStandardPRNG.ms Set Seed (aValue: longint); const

m = 2147483647; begin if (aValue > 0) then FSeed: = aValue

else FSeed:= GetTimeAsLong; {убедиться, что значение начального числа находится в переделах от 0 до т-1

Включительно} if (FSeed >=m-l) then FSeed:= FSeed - (m - 1) + 1; end;

Как несложно заметить в коде метода AsDouble, метод Шрейга выглядит гораздо сложнее, нежели простая формула Xn+l = aXn mod т со значениями а = 16807 и т = 231- 1. Тем не менее, используя достаточно сложные математические выкладки, можно доказать его равенство приведенной формуле.

Кроме того, как уже упоминалось, в генераторе случайных чисел подобного типа использование нуля в качестве начального числа нежелательно, поскольку тогда бы все генерируемые значения были бы нулевыми. Поэтому метод msSetSeed использует значение 0 в качестве флага при необходимости установки начального числа по значению системных часов. К сожалению, для выполнения этой операции в 16- и 32-разрядных системах Windows используется разный код.

Создадим класс случайных чисел, который будет использовать системный генератор случайных чисел - функцию Random. В листинге 6.4 показан код метода AsDouble для такого класса.

Листинг 6.4. Использование в классе системной функции Random

Function TtdSystemPRNG.AsDouble: double; var OldSeed: longint; begin OldSeed:= System.RandSeed; System.RandSeed:= Seed; Result:= System.Random; Seed:= System. RandSeed ; System.RandSeed: = OldSeed; end;

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



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows