1、功能: 产生0到1之间均匀分布的一个随机数 2、方法说明: 设m=216,产生产生0到1之间均匀分布的一个随机数的计算公式如下: ri=mod(2053ri-1 +13849,m),i=1,2,3…… pi =ri/m 例:连续产生10个0到1之间均匀分布的一个随机数 。r的初值取5.0
1 #include "stdio.h" 2 double rnd1(double *r) 3 { int m; 4 double s,u,v,p; 5 s=65536.0; u=2053.0; v=13849.0; 6 m=(int)(*r/s); *r=*r-m*s; 7 *r=u*(*r)+v; m=(int)(*r/s); 8 *r=*r-m*s; p=*r/s; 9 return(p); 10 } 11 main() 12 { int i; 13 double r; 14 r=5.0; 15 printf("\n"); 16 for (i=0; i<=9; i++) 17 printf("%10.7lf\n",rnd1(&r)); 18 printf("\n"); 19 getch(); 20 }
3、功能: 例:产生50个0到1之间均匀分布的一个随机数序列,r的初值取1.0 1 2 3 #include "stdio.h" 4 void rnds(r,p,n) 5 double *r,p[]; 6 int n; 7 { int i,m; 8 double s,u,v; 9 s=65536.0; u=2053.0; v=13849.0; 10 for (i=0; i<=n-1; i++) 11 { *r=u*(*r)+v; m=(int)(*r/s); 12 *r=*r-m*s; p[i]=*r/s; 13 } 14 return; 15 } 16 main() 17 { int i,j; 18 double p[50],r; 19 r=1.0; 20 rnds(&r,p,50); 21 printf("\n"); 22 for (i=0; i<=9; i++) 23 { for (j=0; j<=4; j++) 24 printf("%10.7lf ",p[5*i+j]); 25 printf("\n"); 26 } 27 printf("\n"); 28 getch(); 29 } 30 |
|