C语言 随机函数 种子 您所在的位置:网站首页 c语言随机数生成头文件 C语言 随机函数 种子

C语言 随机函数 种子

2024-07-15 23:02| 来源: 网络整理| 查看: 265

 

1-0:Microsoft VC++产生随机数的原理:

Srand ( )和Rand( )函数。它本质上是利用线性同余法,y=ax+b(mod m)。其中a,b,m都是常数。因此rand的产生决定于x,x被称为Seed。Seed需要程序中设定,一般情况下取系统时间作为种子。它产生的随机数之间的相关性很小,取值范围是0—32767(int),即双字节(16位数),若用unsigned int 双字节是65535,四字节是4294967295,一般可以满足要求。

1-1: 线性同余法:

?/P>

其中M是模数,A是乘数,C是增量,为初始值,当C=0时,称此算法为乘同余法;若C≠0,则称算法为混合同余法,当C取不为零的适当数值时,有一些优点,但优点并不突出,故常取C=0。模M大小是发生器周期长短的主要标志,常见有M为素数,取A为M的原根,则周期T=M-1。例如:

a=1220703125        

a=32719            (程序中用此组数)   

     a=16807          

代码:

void main( )

{

const int n=100;

double a=32719,m=1,f[n+1],g[n],seed;

m=pow(2,31);

cout

         f[i]=fmod((a*f[i-1]),m);

             if(f[i]

                    f[i]=2*(m-f[i])+1;

             }

1-3:平方取中法——冯·诺伊曼

1946年前后,由冯·诺伊曼提出,他的办法是去前面的随机数的平方,并抽取中部的数字。例如要生成10位数字,而且先前的值是5772156649,平方后得到33317792380594909201,所以下一个数是7923805949。

for(j=1;j



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有