您的位置 首页 芯闻

单片机随机数:rand(),srand()

从书中看到rand()函数返回的是0~32767之间的伪随机数。srand设置该伪随机数的初值。在正常使用中,大多数的使用场景是:求0~max;求min~max…

从书中看到rand()函数回来的是0~32767之间的伪随机数。srand设置该伪随机数的初值。

在正常运用中,大多数的运用场景是:
  1. 求0~max;
  2. 求min~max;
随手些了几个函数,作为扩展。C不支持可变参数,也不支持overloard,所以只能用不同的函数称号表明。当然也能够传入个hash的数据结构作为参数(ruby like)。

int rand_with_min_max(int min,int max)
{
return ((rand()/max) + min);
}
int rand_with_min(int min)
{
srand(min);
return rand();
}
int rand_with_max(int max)
{
return (rand()/max);
}

srand()便是给rand()供给种子seed

假如srand每次输入的数值是相同的,那么每次运转发生的随机数也是相同的,

srand(n)

for(10)

rand()
也便是说,以一个固定的数值作为种子是一个缺陷。 一般的做法是以这样一句代码srand((unsigned) time(NULL));来替代,这样将使得种子为一个不固定的数, 这样发生的随机数就不会每次执行都相同了。

1,先看一个比方
#include
#include
#include
using namespace std;
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() );
}

2.关于time.h
time.h中包括许多风趣的函数,比方
char *ctime(long *clock)
本函数把clock所指的时刻(如由函数time回来的时刻)转换成下列格局的
字符串:Mon Nov 21 11:31:54 1983/n/0

#i nclude
#i nclude
#i nclude
using namespace std;

void main()
{
time_t t1,t2;
char getTime[20];
char *ptstring=getTime;

int x,count=0;
x=RAND_MAX;
cout<<t1=time(NULL);
ptstring=ctime(&t1);

while(count<=100)
{
srand( (unsigned)time( NULL ) );
x=rand()%50;
if(x<5)
continue;
else
{
count++;
cout<<"the numth is "<<}
}

检查ptstring的值会显现 “Tue Sep 13 16:31:06 2005”

3, 最终说说srand()函数
void srand(unsigned seed) 初始化随机数发生器

有评论如下:
1.C的函数库之所以没有把运用体系时钟初始化随机种子这步重要的操作直接放进ran

d函数的完成中,我觉得至少有三个原因:
(1)能够高效发生接连的随机数,不必每次都初始化;
(2)给程序员以更高的灵活性,由于可能在要求较高的场合,应该运用更好的的数据

做种子,而不是体系时钟;
(3)关于仅仅想发生很多伪随机数来尽兴某种验证或许计算,未必需求初始化,大不

了程序每次运转都发生相同的一系列随机数罢了——有些情况下,这是无所谓的。

现实上有一个更重要的原因:
作为伪随机序列发生器的rand()函数,有必要具有的一个重要特性便是-》发生的序

列有必要是可重现的。
这不仅仅是一个算法,相当大的程度上,它关系到代码测验的准确性。假如算法中

运用了和rand()的成果相关的数据,经过一个可控的可重现序列,咱们就有时机再现每一

次测验的进程,然后更有用的找到问题的地点。
所以这儿提出一个主张,代码中,假如rand()的函数成果关系到算法的成果,那么

,有必要确保你的rand()调用是可重现的。

4,c言语里函数rand()和srand()的用法 – –

rand(void)用于发生一个伪随机unsigned int 整数。
srand(seed)用于给rand()函数设定种子。

srand 和 rand 应该组和运用。一般来说,srand 是对 rand 进行设置。
比方:
srand((UINT)GetCurrentTime());
int x = rand() % 100;
是生成 0 到 100 之间的随机数。

srand()是用来初始化随机种子数的,由于rand的内部完成是用线性同余法做的,他不是真

的随机数,只不过是由于其周期特别长,所以有必定的规模里可看成是随机的,式子如下


rand = rand*const_1 + c_var;
srand函数便是给它的第一个rand值。

用”int x = rand() % 100;”来生成 0 到 100 之间的随机数这种办法是不或取的,
比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))   发生一个0到n之间的随机


RAND_MAX=0x7fffffff

5.总结
1)srand()给rand()供给种子
2)srand()中的seed一般由时刻函数得,eg srand((UINT)GetCurrentTime()) srand( (u

nsigned)time( NULL ) ) time()函数得到现在的体系时刻…等等

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/266881.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部