#include #include #include int ix=1,iy=1; void main() { int i,j,k,n; double u1,u2,sn1,sn2; double urnd(void); double pi=3.141592653589793238462643383279502884197; double x1=0.0,x2=0.0,x3=0.0,x4=0.0; clock_t t0,t1; double dt; for(i=1;i<=10000;i++) urnd(); scanf("%d",&n); t0=clock(); for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ for(k=1;k<=n;k++){ u1=urnd(); u2=urnd(); sn1=sqrt(-2.0*log(u1))*sin(2.0*pi*u2); sn2=sqrt(-2.0*log(u1))*cos(2.0*pi*u2); x1+=sn1; x2+=sn1*sn1; x3+=sn1*sn1*sn1; x4+=sn1*sn1*sn1*sn1; } } } x1/=((double)n)*((double)n)*((double)n); x2/=((double)n)*((double)n)*((double)n); x3/=((double)n)*((double)n)*((double)n); x4/=((double)n)*((double)n)*((double)n); t1=clock(); dt=(t1-t0)/((double)CLOCKS_PER_SEC); /* printf(" E(X) =%10.7lf\n E(X^2)=%10.7lf\n E(X^3)=%10.7lf\n E(X^4)=%10.7lf\n",x1,x2,x3,x4); */ printf(" E(X) =%10.7lf\n",x1); printf(" E(X^2)=%10.7lf\n",x2); printf(" E(X^3)=%10.7lf\n",x3); printf(" E(X^4)=%10.7lf\n",x4); printf("%4d^3 random draw generation time = %lf seconds\n",n,dt); } /* ================================================ */ 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; }