【C++】隨機數引擎


rand()

  • 基本:使用隨機數時,經常見到的是C標准庫提供的函數rand(),這個函數會生成一個0RAND_MAX之間的一個整形數;
  • 分布:為了得到一個給定范圍內的隨機數,通常會對生成的隨機數取余:rand()%n,rand()%(n-m)+m
  • 種子:通過srand()設置隨機數種子,種子不變的情況下,每次程序運行,調用rand(),都會生成相同的隨機數序列
  • 浮點:使用double(rand())/RAND_MAX可以生成0-1范圍內的隨機浮點數,但精度會有問題;
  • 一般情況下,srand()種子可以使用time(0)進行設置,time()取系統的秒,所以如果srand()和rand()的調用間隔小於1s,則會生成相同的隨機數,如:
        for (size_t i = 0; i < 10; i++) { srand(time(0)); cout << rand() << endl; }

     

 

C++11 : default_random_engine

  • 基本:C++11提供了新的隨機數生成器,隨機數引擎default_random_engine,使用時包含頭文件#include<random>
  • 范圍:默認情況下,default_random_engine的生成范圍是一個unsigned,可以通過方法min()和max()獲取生成范圍;
  • 種子:與rand()類似,default_random_engine也需要通過隨機數種子改變生成的序列,設置方法可以通過調用方法seed()
  • 分布和浮點:隨機數引擎可以通過分布對象設置生成范圍,uniform_int_distribution<unsigned>或uniform_real_distribution<double>
  • 相對rand(),可以使用uniform_real_distribution<>生成隨機浮點數,並且不用擔心精度問題,隨機數引擎的使用方法如下:
        default_random_engine e;//定義隨機數引擎
        uniform_int_distribution<unsigned> id(1, 10);//整型分布
        uniform_real_distribution<double> dd(0, 1.0);//浮點型分布
     e.seed(10);//設置隨機數種子
        for (size_t i = 0; i < 10; i++) { cout << id(e) << " ; " << dd(e) << endl; }

     

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM