C++11--随机数使用

来源:互联网 发布:prototype js 闭包 编辑:程序博客网 时间:2024/05/21 07:55

随机数生成器


C++11提供了一个非确定数生成器random_device,用于产生高质量随机数

#include <iostream>#include <random>#define PRINTMSG( msg ) std::cout << msg << std::endlint main(){ std::random_device rd; for( int index =0; index < 20000; ++index ) {  PRINTMSG( rd() ); } return 0; }


随机数引擎

用以生成随机数,其中包含生成引擎的状态

以下是3个引擎的列表

 

 

样板类整数/浮点品质速度状态数linear_congruential整数低中等1subtract_with_carry两者中等快25mersenne_twister整数高快624

 

 

 

 

 

随机数引擎需要接受一个产生随机数的种子,该种子有random_device提供

#include <iostream>#include <random>#define PRINTMSG( msg ) std::cout << msg << std::endlint main(){std::random_device rd;// linear_congruential_engine std::mt19937// mersenne_twister_engine std::mt19937_64// subtract_with_carry_engine ranlux24_basestd::mt19937 mt(rd());for( int index =0; index < 20000; ++index ){PRINTMSG( mt() );}std::cout << mt() << std::endl;return 0;}


随机数分布

C++提供以下标准分布

分布名描述分布名描述分布名描述uniform_int_distribution离散型均匀分布poisson_distribution布瓦松分布exponential_distribution指数分布bernoulli_distribution伯努利分布binomial_distribution二项分布normal_distribution正态分布geometric_distribution几何分布uniform_real_distribution离散型均匀分布gamma_distribution伽马分布

 

 

 

 

 

 

 

 

 

 

 

各分布的使用也简单,如下代码

 

// 离散型均匀分布#include <iostream>#include <random>#define PRINTMSG( msg ) std::cout << msg << std::endlint main(){std::random_device rd;std::mt19937 gen(rd());// min() is 1, and max() is 6std::uniform_int_distribution<> dis(1, 6);for( int index = 0; index < 20; ++index ){PRINTMSG( dis( gen ) );}return 0;}

/*
 * Blog Addr:
http://blog.csdn.net/vsscusw
 *
 * Desc : Xiao Ma's Blog
 *
 * Author : XiaoMa
 *
 */

原创粉丝点击