分享

产生0到1之间均匀分布的一个随机数与随机数序列

 盛夏流年闪耀 2015-06-30

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 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多