首页 > 编程知识 正文

rand函数的使用方法及实例(rand()和srand()GetTickCount函数用法)

时间:2023-05-04 14:35:06 阅读:121368 作者:3428

中包含的标准库有两个函数帮助生成伪随机数。

函数1 (内部) void;

返回从在srand(seed )中指定的seed到[seed,rand_max )0x7fff之间的随机整数。

函数二、语音扫描(unsigned seed );

参数seed是rand (用于初始化初始值的rand ) )的种子。

rand ) )在每次调用时,可能会显示以下内容:

1 )如果用户以前调用过srand(seed )并为seed指定了值,则会自动调用

srand(seed )一次初始化其开始值。

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

根据上面的第一点,可以看出。

1 ) rand ) )在每次运行程序时生成的值不同,必须对srand(seed )中的seed赋予变量,该变量在每次运行程序时必须不同) (至今为止

2 )否则,如果为seed指定一定的值,则每次运行程序时rand ) )生成的值相同。 但是,该值是在[seed,rand_max(0x7fff ) ]之间随机获取的值。

3 )如果在调用rand (之前未调用srand ) seed (),则效果与调用srand (1),然后调用rand () )相同) 1也是恒定的。

让我举几个例子。 假设获取0到6之间的随机整数(不包括6本身) :

例1、不指定seed :

for(intI=0; i10; I ) {

ran_num=rand(%6;

coutran_num ';

}

每次运行输出: 5 5 4 4 5 4 0 0 4 2

例2、将seed指定为一定值1 :

Srand(1;

for(intI=0; i10; I ) {

ran_num=rand(%6;

coutran_num ';

}

每次运行输出: 5 5 4 4 5 4 0 0 4 2

与例1的结果完全相同。

例3、将seed指定为一定值6 :

Srand(6;

for(intI=0; i10; I ) {

ran_num=rand(%6;

coutran_num ';

}

每次运行输出: 4 1 5 1 4 3 4 4 2 2

随机值也在[ 0,6 ]之间,得到的值与srand(1不同,但每次运行时结果相同。

例4、将seed指定为当前系统经过的时间(秒):time_ttime(0) :

#包含

//…

srand () unsigned (time (0) )0);

for(intI=0; i10; I ) {

ran_num=rand(%6;

coutran_num ';

}

首次运行时输出:0 1 5 4 5 0 2 3 4 2

第二次:3 2 3 0 3 5 5 2 2 3

无论如何,启动程序的时间每次都不同,所以执行结果每次都不同。 (间隔必须在1秒以上吗? 参照下面)。

关于time_ttime(0) :

time_t定义为长整数,返回从1970年1月1日零时0分0秒到当前的经过时间(以秒为单位)。 例如,输出:

计数时间(0;

值约为1169174701,约为37 (年) 365 (日) 24 (小时) 3600 (秒) ) (没有计算年月日)。

此外,ran _ num=rand (对于% 6,

rand ) )的返回值和6求类型,以使所需的随机数在[ 0,6 ]之间。 否则,rand ) )的返回值本身可能会变得巨大。

一般公式如下:

若要获取[a,b]之间的随机整数,请使用(rand () () (b-a ) ) a。 结果的值包括a,不包括b。

a为0时,缩写为rand(%b )。

最后,关于伪随机浮点数:

可以使用rand ()/double ) rand_max获取0到1之间的浮点数。 (请注意,与整数表达式不同,它是除法,不是模。 )

示例:

双精度ran _ numf=0.0;

srand () unsigned (time (0) )0);

for(intI=0; i10; I ) {

ran_numf=rand(/)/(双精度) ) RAND_MAX;

coutran_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的情况,可以这样类推。

GetTickCount函数

函数: GetTickCount返回(retrieve )操作系统从启动到当前经过的时间(elapsed )的毫秒数,返回值为DWORD。

函数原型:

dword gettickcount (语音;

随机数的生成需要随机种子。 计算机生成的随机数是用递归方法得到的,所以需要初始值,也就是通常所说的随机种子。 如果不初始化随机种子,计算机确实有节约的随机种子,每次递归都会得到结果

完全一样。 因此,每次运行程序时都必须初始化随机种子。 vc中的方法调用一个名为srand(int )的函数,其参数

数量是随机种子,但给定常数后,得到的随机序列将完全相同。 因此,可以将系统的时间用作随机种子

因为系统时间保证随机性。

调用方法为rand(gettickcount ) ),但每次调用rand ) )时不能用rand(gettickcount ) )初始化。 因为

当前计算机运行时间相对较快,连续调用rand ()时,系统时间尚未更新,因此得到的随机种子在一定时间内是完整的

一样的。 因此,通常在产生大量随机数之前,只初始化一次随机种子。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。