c库伪随机数发生器

  rand

  srand

  大多时候用时间产生随机发生器的seed

C++代码
  1. int GetRandomNum(int min, int max,int seed)    
  2. {    
  3. //srand((unsigned)time(NULL)); //生成seed    
  4. srand(seed);    
  5. return( rand() % (max - min) + min);    
  6. }    

  c++11 引入的伪随机数发生器.随机数抽象成随机数引擎和分布两部分.引擎用来产生随机数,分布产生特定分布的随机数

  常用的就是线性均匀分布

  uniform_int_distribution

  uniform_real_distribution

C++代码
  1. std::random_device rd;//来产生一个随机数当作种子    
  2. std::uniform_int_distribution<int> uni_dist(0, 9999999); //指定范围的随机数发生器    
  3. std::cout << uni_dist(rd) << std::endl;    

  还有一些其他发生器,如 伯努里分布、泊松分布、正态分布

C++代码
  1. // ConsoleApplication4.cpp : 定义控制台应用程序的入口点。    
  2. //    
  3.     
  4. #include "stdafx.h"    
  5. #include <random>    
  6. #include <memory>    
  7. #include <iostream>    
  8.     
  9. using namespace std;    
  10.     
  11. class Random {    
  12. public:    
  13.     const static  unsigned int  maxRand = std::random_device::max();    
  14.     static Random& getInstance()    
  15.     {    
  16.         static Random instance;    
  17.         return instance;    
  18.     }    
  19.     unsigned int  getInteger() noexcept {    
  20.         return (*dist)(rd);    
  21.     }    
  22.     unsigned int  GetMTEngineInteger() noexcept {    
  23.         return (*mtEngine)();    
  24.     }    
  25.     uint64_t  GetMTEngine64Integer() noexcept {    
  26.         return (*mtEngine64)();    
  27.     }    
  28.     
  29.     unsigned int  GetRand0Integer() noexcept {    
  30.         return (*rand0Engine)();    
  31.     }    
  32.     
  33.     auto GetRanlux48Integer() noexcept ->decltype(auto) {    
  34.         return (*ranlux48Engine)();    
  35.     }    
  36.     
  37. private:    
  38.     Random() noexcept {    
  39.         mtEngine = std::make_shared<std::mt19937>(rd());    
  40.         mtEngine64 = std::make_shared<std::mt19937_64>(rd());    
  41.         dist = std::make_shared<std::uniform_int_distribution< unsigned int >>(std::uniform_int_distribution< unsigned int >(0, maxRand));    
  42.         rand0Engine = make_shared<std::minstd_rand0>(rd());    
  43.         ranlux48Engine = make_shared<std::ranlux48>(rd());    
  44.     }    
  45.     std::random_device rd;    
  46.     std::shared_ptr<std::mt19937> mtEngine;       //32-bit Mersenne Twister by Matsumoto and Nishimura, 1998    
  47.     std::shared_ptr<std::mt19937_64> mtEngine64; //64-bit Mersenne Twister by Matsumoto and Nishimura, 2000(马特赛特旋转演算法)    
  48.     std::shared_ptr<std::minstd_rand0> rand0Engine;    
  49.     std::shared_ptr<std::ranlux48> ranlux48Engine;    
  50.     
  51.     std::shared_ptr<std::uniform_int_distribution< unsigned int > > dist;    
  52. };    
  53.     
  54.     
  55.     
  56. int main()    
  57. {    
  58.     
  59.     cout << Random::getInstance().GetMTEngineInteger() << endl;    
  60.     cout << Random::getInstance().GetMTEngine64Integer() << endl;    
  61.     cout << Random::getInstance().GetRand0Integer() << endl;    
  62.     cout << Random::getInstance().GetRanlux48Integer() << endl;    
  63.     
  64.     cout << Random::getInstance().getInteger() << endl;    
  65.     
  66.     
  67.     return 0;    
  68. }
除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.jizhuomi.com/software/693.html
2017年2月17日
作者:鸡啄米 分类:软件开发 浏览: 评论:0