【C++】srand及rand函数

    PS:是在数据挖掘实验中遇到的函数

摘自:【http://blog.csdn.net/candyliuxj/article/details/4396666--candyliuxjspa

rand

函数名:   rand  
  功   能:   随机数发生器 
  用   法:   int rand(void);  
.net

  所在头文件: stdlib.hblog

  函数说明 :get

                rand()的内部实现是用线性同余法作的,它不是真的随机数,因其周期特别长,故在必定数据挖掘

                的范围里可当作是随机的。随机数

                rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用 循环

                unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每一个数字被选中程序

                的机率是相同的。                      方法

                用户未设定随机数种子时,系统默认的随机数种子为1。

                rand()产生的是伪随机数字,每次执行时是相同的;若要不一样,用函数srand()初始化它。

程序例包含的内容:

#include   <stdlib.h> 

  1. #include   <time.h>   
  2. #define MIN 1    //随机数产生的范围      
  3. #define MAX 10  

srand((unsigned)time(0))

MIN + (int)MAX * rand() / (RAND_MAX + 1)

srand

函数名:   srand  
  功   能:   初始化随机数发生器  
  用   法:   void srand(unsigned  int  seed); 
  所在头文件: stdlib.h  
  函数说明:
               srand()用来设置rand()产生随机数时的随机数种子。

               参数seed必须是个整数,一般能够利用time(0)的返回值或NULL来当作seed。

               若是每次seed都设相同值,rand()所产生的随机数值每次就会同样。

程序例包含的内容:

#include   <stdlib.h> 

  1. #include   <time.h>   
  2. #define MIN 0    //随机数产生的范围      
  3. #define MAX 99  

srand((unsigned)time(NULL))

MIN + rand() % (MAX + MIN - 1)

rand与srand

    rand()和srand()要一块儿使用,其中srand()用来初始化随机数种子,rand()用来产生随机数。

      由于默认状况下随机数种子为1,而相同的随机数种子产生的随机数是同样的,失去了随机性的意义,因此为使每次获得的随机数不同,用函数srand()初始化随机数种子。srand()的参数,用time函数值(即当前时间),由于两次调用rand()函数的时间一般是不一样的,这样就能够保证随机性了。

必定范围随机数的通用函数

1. a + rand() % n ;其中的a是起始值,n是整数的范围;

2. a + (int)b * rand() / (RAND_MAX + 1)整数;

3. rand() / double(RAND_MAX)浮点数。

rand产生相同随机数的缘由

      计算机的随机数都是由伪随机数,便是由小M多项式序列生成的,其中产生每一个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)  

      咱们知道rand()函数能够用来产生随机数,可是这不是真真意义上的随机数,是一个伪随机数,是根据一个数(咱们能够称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而至关于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。 

      为获得不一样的随机数序列,则需改变这个种子的值。方法:在开始产生随机数前,调用一次srand(time(NULL))(注意:srand()必定要放在循环外面或者是循环调用的外面,不然的话获得的是相同的随机数)。

相关文章
相关标签/搜索