Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

CQG / Задание3 / task3_CQG / Генератор случайных чисел, поставляемый с системой

.htm
Скачиваний:
7
Добавлен:
16.04.2013
Размер:
12.4 Кб
Скачать

Генератор случайных чисел, поставляемый с системой A { TEXT-DECORATION: none } A:hover { COLOR: #ff6600; TEXT-DECORATION: underline } H2 { FONT-WEIGHT: bold; FONT-SIZE: 14pt; FONT-FAMILY: sans-serif } PRE { FONT-SIZE: 9pt } .source { FONT-SIZE: 9pt; COLOR: #666699 } .l2 { FONT-SIZE: 10pt } .l3 { FONT-SIZE: 9pt }

Path: Математика » Псевдослучайные последовательности » Стандартный генератор   Генератор случайных чисел, поставляемый с системой

Статья предоставлена

(c) Nikitine Valeri F. 2000,

web: algorithm.narod.ru

В стандарте ANSI-C имеется функция rand(), выдающая равномерно распределенное число от 0 до RAND_MAX, и связанная с ней функция srand(), производящая начальную установку счетчика. Описание в файле <stdlib.h>. Почти все подобные генераторы используют рекуррентную последовательность

I(n+1)=(a*I(n)+c)(mod m).

Число a называется мультипликатором, число c инкрементом, а число m - модулем.

Такой выбор может послужить серьезным ограничением на статистические свойства последовательности случайных чисел. Кроме того, в большинстве случаев RAND_MAX=35767, что значительно меньше, чем диапазон изменения целых чисел. В некоторых испытаниях теория рекомендует 106 - 109 случайных проб, но, пользуясь подобным счетчиком, можно получить не более RAND_MAX одинаковых случайных чисел, т.е. в 30 тыс.- 30 млн. раз меньше рекомендуемого.

Генератор ANSI-C был опубликован комиссией как 'ример'. Мы его тоже приводим, но как 'не рекомендованный' для серьезных приложений.

/* (в модуле stdlib.h) */ #define RAND_MAX 32767 /* "пример" от комитета ANSI-C */ unsigned long next=1; int rand(void) { next=next*1103515245+12345; return((unsigned int)(next/65536)%32768); } void srand(unsigned int seed) { next=seed; } Мультипликатор и инкремент этого примера (который, скорее всего и поставляется со стандартной библиотекой C) не являются оптимальными. Об оптимальных константах для такого рода последовательностей читайте в описаниях других генераторов.

Обсудить на форуме »

  Комментарии для веб-мастера

Автор: Dest

Время: 25-09-04 05:37

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

  

Ваши комментарии. Вопросы будут удалены: для них есть форум. Имя: E-mail:   

Copyright 2000-2002 © Ilia Kantor, при поддержке проекта MANUAL.RU

hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=2161&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("")