<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機隨機數:rand(),srand()

單片機隨機數:rand(),srand()

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò ) 收藏
從書(shū)中看到rand()函數返回的是0~32767之間的偽隨機數。srand設置該偽隨機數的初值。
在正常使用中,大多數的使用場(chǎng)景是:
  1. 求0~max;
  2. 求min~max;
順手些了幾個(gè)函數,作為擴展。C不支持可變參數,也不支持overloard,所以只能用不同的函數名稱(chēng)表示。當然也可以傳入個(gè)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);
}

本文引用地址:http://dyxdggzs.com/article/201611/315895.htm

srand()就是給rand()提供種子seed

如果srand每次輸入的數值是一樣的,那么每次運行產(chǎn)生的隨機數也是一樣的,

srand(n)

for(10)

rand()
也就是說(shuō),以一個(gè)固定的數值作為種子是一個(gè)缺點(diǎn)。 通常的做法是以這樣一句代碼srand((unsigned) time(NULL));來(lái)取代,這樣將使得種子為一個(gè)不固定的數, 這樣產(chǎn)生的隨機數就不會(huì )每次執行都一樣了。


1,先看一個(gè)例子
#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.關(guān)于time.h
time.h中包含很多有趣的函數,譬如
char *ctime(long *clock)
本函數把clock所指的時(shí)間(如由函數time返回的時(shí)間)轉換成下列格式的
字符串: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的值會(huì )顯示 "Tue Sep 13 16:31:06 2005"

3, 最后說(shuō)說(shuō)srand()函數
void srand(unsigned seed) 初始化隨機數發(fā)生器

有討論如下:
1.C的函數庫之所以沒(méi)有把使用系統時(shí)鐘初始化隨機種子這步重要的操作直接放進(jìn)ran

d函數的實(shí)現中,我覺(jué)得至少有三個(gè)原因:
(1)可以高效產(chǎn)生連續的隨機數,不用每次都初始化;
(2)給程序員以更高的靈活性,因為可能在要求較高的場(chǎng)合,應該使用更好的的數據

做種子,而不是系統時(shí)鐘;
(3)對于只是想產(chǎn)生大量偽隨機數來(lái)盡興某種驗證或者統計,未必需要初始化,大不

了程序每次運行都產(chǎn)生同樣的一系列隨機數而已——有些情況下,這是無(wú)所謂的。

事實(shí)上有一個(gè)更重要的原因:
作為偽隨機序列產(chǎn)生器的rand()函數,必須具備的一個(gè)重要特性就是-》產(chǎn)生的序

列必須是可重現的。
這不僅僅是一個(gè)算法,相當大的程度上,它關(guān)系到代碼測試的準確性。如果算法中

使用了和rand()的結果相關(guān)的數據,通過(guò)一個(gè)可控的可重現序列,我們就有機會(huì )再現每一

次測試的過(guò)程,從而更有效的找到問(wèn)題的所在。
所以這里提出一個(gè)建議,代碼中,如果rand()的函數結果關(guān)系到算法的結果,那么

,必須保證你的rand()調用是可重現的。

4,c語(yǔ)言里函數rand()和srand()的用法 - -

rand(void)用于產(chǎn)生一個(gè)偽隨機unsigned int 整數。
srand(seed)用于給rand()函數設定種子。

srand 和 rand 應該組和使用。一般來(lái)說(shuō),srand 是對 rand 進(jìn)行設置。
比如:
srand((UINT)GetCurrentTime());
int x = rand() % 100;
是生成 0 到 100 之間的隨機數。

srand()是用來(lái)初始化隨機種子數的,因為rand的內部實(shí)現是用線(xiàn)性同余法做的,他不是真

的隨機數,只不過(guò)是因為其周期特別長(cháng),所以有一定的范圍里可看成是隨機的,式子如下


rand = rand*const_1 + c_var;
srand函數就是給它的第一個(gè)rand值。

用"int x = rand() % 100;"來(lái)生成 0 到 100 之間的隨機數這種方法是不或取的,
比較好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))   產(chǎn)生一個(gè)0到n之間的隨機


RAND_MAX=0x7fffffff

5.總結
1)srand()給rand()提供種子
2)srand()中的seed一般由時(shí)間函數得,eg srand((UINT)GetCurrentTime()) srand( (u

nsigned)time( NULL ) ) time()函數得到現在的系統時(shí)間...等等




關(guān)鍵詞: 單片機隨機

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>