(0_0) 参考 RandomNumberDistribution 。
1.uniform_int_distribution 范围内均匀分布的整数值
Refer to:
since C++11在 <random>
头文件中定义:
template< class IntType = int >
class uniform_int_distribution;
产生在闭区间[a,b]
上均匀分布的随机整数i
,即更与离散分布概率:
P
(
i
∣
a
,
b
)
=
1
b
−
a
+
1
P(i \mid a, b)=\frac{1}{b-a+1}
P(i∣a,b)=b−a+11
- 模板参数
IntType
:生成器生成的结果类型。如果这不是short, int, long, long long, unsigned short, unsigned int, unsigned long, or unsigned long long
其中之一,则效果未定义 - 示例
#include <random> #include <iostream> int main(){ std::random_device rd; //将用于获取随机数引擎的种子 std::mt19937 gen(rd()); //标准的mersenne_twister_engine 以rd()为种子 std::uniform_int_distribution<> distrib(1, 6); for (int n=0; n<10; ++n) //摇10次骰子 //使用`distrib`将gen生成的随机无符号int转换为[1, 6]中的int std::cout << distrib(gen) << ' '; std::cout << '\n'; }
2.uniform_real_distribution 范围内均匀分布的真实值
Refer to:
since C++11在 <random>
头文件中定义:
template< class RealType = double >
class uniform_real_distribution;
产生在闭区间[a,b)
上均匀分布的产生随机浮点值 x
,即更与离散分布概率:
P
(
x
∣
a
,
b
)
=
1
b
−
a
P(x \mid a, b)=\frac{1}{b-a}
P(x∣a,b)=b−a1
- 模板参数
RealType
:生成器生成的结果类型。如果这不是float, double, or long double
其中之一,则效果未定义 - Note:
为了在闭区间[a,b]
上创建分布,std::nextafter(b, std::numeric_limits<RealType>::max())
可以用作第二个参数 - 示例
#include <random> #include <iostream> int main(){ std::random_device rd; //将用于获取随机数引擎的种子 std::mt19937 gen(rd()); //标准mersenne_twister_engine以rd()为种子 std::uniform_real_distribution<> dis(1.0, 2.0); for (int n = 0; n < 10; ++n) { //使用dis将gen生成的随机unsigned int转换为[1, 2) 中的double。 std::cout << dis(gen) << ' '; } std::cout << '\n'; }