Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76124
  • 博文数量: 20
  • 博客积分: 1297
  • 博客等级: 中尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-13 15:26
文章分类

全部博文(20)

文章存档

2011年(20)

我的朋友

分类: C/C++

2011-01-14 10:42:12

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、功能:
产生0到1之间均匀分布的一个随机数序列

例:产生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 
阅读(4392) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~