logo search
Stohastic / Stohastic / Методичка_Стохастика_Федунов

Метод Парка – Миллера (мультипликативный конгруэнтный метод)

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;

}

  1. Быстрый алгоритм генерации случайных чисел

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;

Задания для самостоятельной работы.