随机数学习整理

来源:互联网 发布:数据库查找重复数据 编辑:程序博客网 时间:2024/05/21 22:32

rand()函数:

  1. rand()的内部实现用的是线性同余法,它不是真的随机数,因其周期特别长,故在一定的范围内可以看成是随机的。
  2. 这种伪随机数是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意:小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)
  3. 目前,计算机中用来产生随机数的算法基本上都是“线性同余”法。rand()返回一随机数值的范围在0至RAND_MAX之间,其中RAND_MAX的范围是32767到2147483647之间(int型)。
  4. 0~RAND_MAX每个数字被选中的机率是相同的。
  5. 用户未设定随机数种子时,系统默认的随机数种子为
  6. rand()产生的是伪随机数,它每次执行时基于的为随机数序列是相同的,若要让这个伪随机数列不同的话,就需要用随机数发生函数srand()初始化它,即对随机数种子进行“播种”。

使用随机数生成二人组rand()和srand()来生成随机数

首先调用一次srand函数初始化随机数种子。代码如下:
srand((unsigned)time(NULL));
然后调用rand函数生成随机数。

1.产生一个范围内的随机数:

要取得[a,b)的随机数

 a + (int)(b-a)*rand()/(RAND_MAX + 1);

要取得[a,b]的随机数

 a + (int)(b-a)*rand()/(RAND_MAX);

要取得[0,1]之间的浮点数

rand()/double(RAND_MAX);


 2.筛选型随机数

如希望取得0~99的随机数,但不能是6或是5的倍数

int x = (int)(100 * rand()/(RAND_MAX + 1.0));while((x == 6) || (x % 5 == 0)){    x = (int)(100 * rand()/(RAND_MAX + 1.0));}

3.从一组乱数中取随机数

可以用数组将这些数存储,然后生成一个0~size-1范围内的随机数,以其对数组做下标运算即可实现随机取数。

0 0
原创粉丝点击