在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

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

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

            srand(n)

            for(10)

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


            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.關(guān)于time.h
            time.h中包含很多有趣的函數(shù),譬如
            char *ctime(long *clock)
            本函數(shù)把clock所指的時間(如由函數(shù)time返回的時間)轉(zhuǎn)換成下列格式的
            字符串: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()函數(shù)
            void srand(unsigned seed) 初始化隨機數(shù)發(fā)生器

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

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

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

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

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

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

            使用了和rand()的結(jié)果相關(guān)的數(shù)據(jù),通過一個可控的可重現(xiàn)序列,我們就有機會再現(xiàn)每一

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

            ,必須保證你的rand()調(diào)用是可重現(xiàn)的。

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

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

            srand 和 rand 應該組和使用。一般來說,srand 是對 rand 進行設(shè)置。
            比如:
            srand((UINT)GetCurrentTime());
            int x = rand() % 100;
            是生成 0 到 100 之間的隨機數(shù)。

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

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


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

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

            數(shù)
            RAND_MAX=0x7fffffff

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

            nsigned)time( NULL ) ) time()函數(shù)得到現(xiàn)在的系統(tǒng)時間...等等




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

            評論


            技術(shù)專區(qū)

            關(guān)閉