C中的隨機數函數

來源:互聯網
上載者:User

      這篇筆記是沒什麼技術含量的,這裡只抱著理清一些基本概念的想法練練筆。

      當我們要用到隨機數時,通常是要用到C程式庫中所提供的rand() ,但因為其“偽”性,所以如果要產生真正的隨機序列必須要瞭解“ 種子”的概念。開始的時候這個“種子”是我不知道的。如今總算找到了答案。

      @因為隨機數產生函數 rand()(函數原型int rand(void);)的機理是通過一個靜態全域變數來產生的,即種子。預設情況下種子 = = 1;如下:

      ststic unsigned long int next = 1;     //種子

      int rand ( void)

      {

            next = next * 1103515245 + 12345;

            return (unsigned int ) (next / 65536) % 32768; //可見產生的隨機數是不大於 32768;

      } 

      可見每次調用此函數的時候產生的數當然就一樣咯。

     @所以就又有了個重設種子的第二個函數 srand ().(函數原型 void srand(unsigned int seed));來協助rand()了,但這往往還是達不到我們的要求,因為我們只有每次通過重設種子來改變產生的隨機數,這常常顯得比較麻煩。

     void srand(unsigned int seed)
    {
            next = seed;
    }

     @要是可以自動重設種子該多好啊。這是可行的。因為一個系統的時鐘往往是在不斷的變化的。因此可以通過一個能夠從系統時鐘中得到不同傳回值的函數time()來初始化種子。

     #include <time.h>

      srand((unsigned int) time(0))

     這樣就可以隨著每次的rand()而產生不同的隨機數了。

聯繫我們

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