※C++隨筆※=>☆C++基礎☆=>※№→C++中 Rand隨機序列函數

來源:互聯網
上載者:User

標準庫<cstdlib>(被包含於<iostream>中)提供兩個協助產生偽隨機數的函數:  
     
從srand (seed)中指定的seed開始,返回一個[seed, RAND_MAX(0x7fff))間的隨機整數。  
        函數二:void srand(unsigned seed);

參數seed是rand()的種子,用來初始化rand()的起始值。(一般情況下:我們都使用time(NULL)種子, 從一個時間點(一般是1970年1月1日0時0分0秒)到那時的秒數(即日曆時間))  

  
這個是bcc55中的定義,說明這個整數的最大數是0x7fffu,u代表unicode編碼。

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也是一個定值)。  


1) 給srand()提供一個種子,它是一個unsigned int類型;
2) 調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到RAND_MAX之間);
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結果。



// crt_rand.c// This program seeds the random-number generator// with the time, then exercises the rand function.//#include <stdlib.h>#include <stdio.h>#include <time.h>void SimpleRandDemo( int n ){   // Print n random numbers.   int i;   for( i = 0; i < n; i++ )      printf( "  %6d\n", rand() );}void RangedRandDemo( int range_min, int range_max, int n ){   // Generate random numbers in the half-closed interval   // [range_min, range_max). In other words,   // range_min <= random number < range_max   int i;   for ( i = 0; i < n; i++ )   {      int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min)            + range_min;      printf( "  %6d\n", u);   }}int main( void ){   // Seed the random-number generator with the current time so that   // the numbers will be different every time we run.   srand( (unsigned)time( NULL ) );   SimpleRandDemo( 10 );   printf("\n");   RangedRandDemo( -100, 100, 10 );}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.