srand函数用法(matlab中rand函数)
大家好,感谢邀请,今天来为大家分享一下srand函数用法的问题,以及和matlab中rand函数的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
srand函数和rand函数到底如何使用
rand函数
函数头文件:stdlib.h
函数定义:int rand(void)
函数功能:产生一个随机数
函数说明:
rand函数产生的随机数严格意义讲不是真正的随机数,它里面采用了线性同余法计算出随机数,所谓的线性同语法简单来说就是使用了一个公式。
该方法有个最大周期M,也就是说该方法实在一定的范围内生成一串数字,不过这个M一般来说比较大,所以正常使用时一般看起来就是产生了随机的数。
不过这个函数由于默认种子是1,所以每次产生的随机数都是相同的,也就是说每次运行程序,产生的随机数都是一样的,失去了部分随机的意义,所以一般会配合srand函数使用。
返回值:返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最小在32767之间。若用unsigned int双字节是65535,四字节是4294967295的整数范围。且0-RAND_MAX每个数字被选中的机率是相同的。
srand函数
函数头文件:stdlib.h
函数定义:void srand(unsigned int seed)
函数功能:设置随机数种子
函数说明:通常可以用getpid()(获取当前进程的进程识别码)或者time(NULL)(获取当前系统的时间信息)来充当种子,保持每次运行时种子是不一样的。
扩展资料
当srand()的内容相同时,则在rand()后产生相同的随机数列;所以当用time(NULL)来进行初始随机数,根据时间来产生随机数,这样就能产生不同的。
调用方法是srand(GetTickCount()),但是又不能在每次调用rand()的时候都用srand(GetTickCount())来初始化。
因为现在计算机运行时间比较快,当连续调用rand()时,系统的时间还没有更新,所以得到的随机种子在一段时间内是完全相同的,因此一般只在进行一次大批随机数产生之前进行一次随机种子的初始化。
参考资料:百度百科——rand函数
srand函数是什么意思
意思是:用rand()%100产生一个随机的数(1~100间)。
使用rand()是先要设置随机发生因子,srand()函数就是用来设置随机发生因子的。rand产生一个0-0x7fff的随机数,即最大是32767的一个数。
rand函数产生一个0到RAND_MAX的伪随机数,这里的RAND_MAX因不同的实现而异,但RAND_MAX至少为32767。
有些时候,用户需要获取一定更小范围中的一随机数,如得到一组100以内的随机数,就可以采用rand()%100这种方法,使得结果在100以内。
扩展资料:
函数rand(在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成。
srand((unsigned)time(NULL))则使用系统定时/计数器的值做为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的。
相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。
rand()函数和srand()函数
标准库
(被包含于
中)提供两个帮助生成伪随机数的函数:
函数一:int
rand(void);
从srand
(seed)中指定的seed开始,返回一个[seed,
rand_max(0x7fff))间的随机整数。
函数二:void
srand(unsigned
seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
可以认为rand()在每次被调用的时候,它会查看:
1)
如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2)
如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1)
如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2)
否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed,
rand_max(0x7fff))之间的一个随机取得的值。
3)
如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。
举几个例子,假设我们要取得0~6之间的随机整数(不含6本身):
例一,不指定seed:
for(int
i=0;i<10;i++){
ran_num=rand()
%
6;
cout<
//…
srand((unsigned)time(0));
for(int
i=0;i<10;i++){
ran_num=rand()
%
6;
cout<
评论
0
0
加载更多
OK,关于srand函数用法和matlab中rand函数的内容到此结束了,希望对大家有所帮助。