#include #include int ix=1,iy=1; void main(){ float rho; long int i,m,n; double nrnd(void); double x,y; double x1=0.0,x2=0.0; double y1=0.0,y2=0.0; double xy1=0.0; for(i=1;i<=10000;i++) nrnd(); scanf("%f%ld%ld",&rho,&m,&n); x=0.0; y=0.0; for(i=-m+1;i<=n;i++){ x=rho*y+sqrt( 1.-rho*rho )*nrnd(); y=rho*x+sqrt( 1.-rho*rho )*nrnd(); if( i >= 1 ){ x1+=x/((double)n); x2+=x*x/((double)n); y1+=y/((double)n); y2+=y*y/((double)n); xy1+=x*y/((double)n); } } printf("# of Burn-in = %10ld\n",m); printf("# of Random Draws = %10ld\n",n); printf("Rho = %7.2f\n",rho); printf("Mean = ( %10.5lf, %10.5lf )\n",x1,y1); printf("Variance = ( %10.5lf, %10.5lf )\n",x2,y2); printf("Covariance = %10.5lf\n",xy1); } /* ------------------------------------------------ */ double urnd(void) { int kx,ky; double rn; /* Input: ix, iy: Seeds Output: rn: Uniform Random Draw U(0,1) */ kx=ix/53668; ix=40014*(ix-kx*53668)-kx*12211; ky=iy/52774; iy=40692*(iy-ky*52774)-ky*3791; rn=(float)(ix-iy)/2147483563.; rn-=(int)rn; if( rn<0.) rn++; return rn; } /* ------------------------------------------------ */ double nrnd(void) { double rn,r1,r2; double pi=3.1415926535897932385; double urnd(); r1=urnd(); r2=urnd(); rn=sqrt( -2.*log(r1) )*sin( 2.*pi*r2 ); return rn; }