#pragma hdrstop #include #include #include #include #include //--------------------------------------------------------------------------- #define frand() (((float)rand())/((float)RAND_MAX)) #define sqr(x) ((x)*(x)) int help=0; float savegaussdev; const float PI=3.141592654; float Gauss() { float v1,v2,fac,r; if(help==0) { do { v1=2.0*frand()-1.0; v2=2.0*frand()-1.0; r=sqr(v1)+sqr(v2); } while (r>=1.0) ; // ma koncit, ked r<1 printf("%d\n",(r<1)); fac=sqrt(-2.0*log(r)/r); savegaussdev=v1*fac; help=1; return v2*fac; } else { help=0; return savegaussdev; }; }; float Gauss2() { float a,b; if(help==0) { a=sqrt(-2.0*log(frand())); b=2*PI*frand(); savegaussdev=a*cos(b); help=1; return a*sin(b); } else { help=0; return savegaussdev; }; }; #pragma argsused int main(int argc, char **argv) { for(int i=0; i<100; i++) printf("%f \t",Gauss()); getch(); return 0; }