您的位置:首页 > 其它

随机数----srand,rand

2015-08-06 17:03 232 查看
rand(void)用于产生一个伪随机unsigned int 整数。

srand(seed)用于给rand()函数设定种子。

如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的。

srand这个函数一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的数字。

MSDN中的例子:

// crt_rand.c

// This program seeds the random-number generator

// with the time, then displays
10 random integers.

//

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main( void )

{

int i;

// Seed the random-number generator with current time so
that

// the numbers will be different every time we run.

srand( (unsigned)time( NULL ) );

// Display 10 numbers.

for( i = 0; i < 10;i++ )

printf( " %6d\n", rand() );

printf("\n");

// Usually, you will want to generate
a number in a specific range,

// such as 0 to 100, like
this:

{

int RANGE_MIN = 0;

int RANGE_MAX = 100;

for (i = 0; i < 10; i++ )

{

int rand100 = (((double) rand() /

(double) RAND_MAX) * RANGE_MAX + RANGE_MIN);

printf( " %6d\n", rand100);

}

}

}

RAND_MAX表示整数所能表达的最大值

可以认为rand()在每次被调用的时候,它会查看:

1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用

srand(seed)一次来初始化它的起始值。

2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。

要取得[a,b)之间的随机整数,使用(rand()
% (b-a))+ a (结果值将含a不含b),

其中(rand()
% (b-a))可以看成是取[a-a,b-a)即[0,b-a)之间的随机整数,后面再加上a就是取得[a,b)之间的随机整数。

在a为0的情况下,简写为rand() % b。

关于伪随机浮点数:

用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:

double ran_numf=0.0;

srand((unsigned)time(0));

for(int i=0;i <10;i++){

ran_numf = rand() / (double)(RAND_MAX);

cout < <ran_numf < < " ";

}

运行结果为:0.716636,0.457725,…等10个0~1之间的浮点数,每次结果都不同。

如果想取更大范围的随机浮点数,比如1~10,可以将

rand() /(double)(RAND_MAX) 改为 rand() /(double)(RAND_MAX/10)

运行结果为:7.19362,6.45775,…等10个1~10之间的浮点数,每次结果都不同。

至于100,1000的情况,如此类推。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: