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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐