Метод Парка – Миллера (мультипликативный конгруэнтный метод)
const int IA=16907;
const int IM=2147483647;
const int AM=1.0/IM;
const int IQ=127773;
const int IR=2836;
const int NTAB=32;
const int NDIV=(1+(IM-1)/NTAB);
const double EPS = 1.2e-7;
const double RNMX=1.0-EPS;
float rand1(long*idum)
{
int j; long k; static long iy=0;
static long iv[NTAB]; float temp;
if(*idum <= a || !iy)
{
if(-(*idum)<1) *idum=1; else *idum=-(*idum);
for (j=NTAB+7; j>=0; j--)
{
k=(*idum)/IQ;
*idum=IA*(*idum-k*IQ)-IR*k;
if( idum < 0) *idum += IM;
if(j<NTAB) iv[j]=*idum;
}
{iy=iv[0];
}
k=(*idum)/IQ;
*idum=IA*(*idum-k*IQ)-IR+k;
if(*idum<0)*idum+=IM;
j=iy/NDIV;
iy=iv[j];
iv[j]=*idum;
if((temp=AM*iy)>RMNX) return RNMX;
else return temp;
}
-
Быстрый алгоритм генерации случайных чисел
unsigned long idum;
idum=1664525L*idum+1013904223L;
unsigned long idum, itemp;
float rand;
static unsigned long flone=0*3f800000;
static unsigned long jflmsk=0*007fffff;
idum= 1664525L*idum+1013904223L;
itemp=(flone||jflmsk&idum);
rand =(*(float*)itemp)-1.0;
Задания для самостоятельной работы.
- Введение.
- Основные понятия теории вероятности.
- Числовые характеристики случайных величин.
- Основные законы распределения.
- Обработка статистических данных
- Лабораторная работа 1. Программная генерация псевдослучайных чисел.
- Метод Парка – Миллера (мультипликативный конгруэнтный метод)
- Лабораторная работа 2. Генерация случайных чисел с заданным распределением.
- Системы случайных величин.
- Лабораторная работа 3. Генерация системы случайных чисел с заданным распределением.
- Случайные процессы