C中的rand函數和srand函數

來源:互聯網
上載者:User

標籤:random   c   

rand函數和srand函數


先我們要對rand&srand有個總體的看法:srand初始化隨機種子,rand產生隨機數,下面將詳細說明。

1、rand(產生隨機數)

表標頭檔: #include<stdlib.h>

定義函數 :int rand(void)

函數說明 :

因為rand的內部實現是用線性同餘法做的,他不是真的隨機數,只不過是因為其周期特別長,所以有一定的範圍裡可看成是隨機的,rand()會返回一隨機數值,範圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。rand()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()。

返回值:

返回0至RAND_MAX之間的隨機整數值,RAND_MAX的範圍最少是在32767之間(int),即雙位元組(16位元)。若用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。

0~RAND_MAX每個數字被選中的機率是相同的。


2、srand(設定隨機數種子)

表標頭檔:#include<stdlib.h>

定義函數:void srand (unsigned int seed);

函數說明:

srand()用來設定rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。


程式碼範例:(用於產生20個0-100之間的隨機數,若需要產生n~m的數呢?我們只要對rand()進行一些 符號操作就行了;n+rand()%(m-n+1); 即產生m-n之間的隨機數再加上n)

/ crt_rand.c// This program seeds the random-number generator// with the time, then displays 10 random integers.//#include <stdlib.h>#include <stdio.h>#include <time.h>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 < 20;i++ )       printf( "   %6d\n", rand() );   printf("\n");   // Usually, you will want to generate a number in a specific range,   // such as 0 to 100, like this:   {      int RANGE_MIN = 0;      int RANGE_MAX = 100;      for (i = 0;     i < 20; i++ )       {          int rand100 = (((double) rand() /                         (double) RAND_MAX) * (RANGE_MAX-RANGE_MIN) + RANGE_MIN);          printf( "   %6d\n", rand100);       }   }



PS:rand()和random()的區別:

int rand(void):返回 0 ------RAND_MAX 之間的一個 int 類型整數,該函數為非安全執行緒函數。並且產生隨機數的效能不是很好,已經不推薦使用

long int random(void):返回 0 ------- RAND_MAX 之間的一個 long 類型整數,該函數會產生一個非常大的隨機值,最大為 16*((2**31)-1)。random 函數使用非線性反饋隨機數發生器產生預設大小為31個長整數表所返回的連續偽隨機數。

 

如果你使用 srandom 種植種子, 則你應該使用 random 返回隨機數, 如果你使用 srand 種植種子, 則你應該使用rand返回隨機數。

srand和rand官方已經不推薦使用。原因是產生隨機數的效能不是很好, 另外是隨機數的隨機性沒有random好, 再者就是不是安全執行緒。




C中的rand函數和srand函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.