Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Алгоритмы / Математика / Генерация псевдослучайных последовательностей /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Генератор случайных чисел, поставляемый с системой - Программирование от RIN.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) не являются оптимальными. Об оптимальных константах для такого рода последовательностей читайте в описаниях других генераторов.



 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь