C++离散均匀分布

1、c++中使用离散均匀分布可以引用这个有文件

#include <random>

2、在使用std::uniform_int_distribution类模板构造一个分布对象。

static constexpr int __MIN_CNT__ = 200;
std::uniform_int_distribution<> randomer(0, __MIN_CNT__ - 1); // 构造0到200的离散均匀分布

3、构建随机的engine

这里的e_需要一个随机初始化的种子,可以用时间,也可以使用其他的。

// 用时间初始化
#include <ctime>
std::default_random_engine e_(time(NULL));
// 使用 random_device初始化随机数生成器
std::random_device rd; // Non-deterministic seed source
std::default_random_engine e_{rd()}; // Create random number generator

4、随机获取其中的一个值

int random_value = randomer(e_);

5. 使用param方法重新设置离散分布的范围

using Range = std::uniform_int_distribution<>::param_type;
randomer.param(Range{-5, 5}); //生成-5到5的离散均匀分布

5.1 保存范围

这里还是使用param()方法

auto old_rng = randomer.param();

其他用法

获取这个区间的最大值

std::cout << "Range from 0 to "<< std::numeric_limits<std::uniform_int_distribution<> :: result_type>::max()<<std::endl;

范围的上边界和下边界可由a() 和 b()获得,它们可以分别返回范围的下边界和上边。

randomer.a();
randomer.b();

tips

这里还有其他的分布函数比如伯努利分布等

explicit bernoulli_distribution(const param_type& _Par0);//伯努利分布
// CLASS TEMPLATE geometric_distribution
template <class _Ty = int>
class geometric_distribution {// ...} // 几何分布
// CLASS TEMPLATE poisson_distribution AND HELPER
template <class _Ty = int>
class _Small_poisson_distribution { // poisson distribution with small mean};

还有许多分布,可以自行查看源文件

posted @ 2021-04-05 12:50  cyssmile  阅读(449)  评论(0编辑  收藏  举报