随机数生成器min和max-bound,不工作?

时间:2014-05-15 23:00:23

标签: c++ c++11 random

我使用以下代码选择0到4000之间的随机短片:

std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<unsigned short> dist(0, 4000);
unsigned short random_no = dist(mt);

但是,我得到的值是24,583?

1 个答案:

答案 0 :(得分:6)

您希望将代码更改为:

std::uniform_int_distribution<unsigned short> dist(0, 4000);

您当前使用的std::uniform_real_distribution预计仅用于浮点类型。


现在标准因为我想引用!

在标准(N3797)中26.5.2 [rand.synopsis]其中一项是std::uniform_real_distribution的声明:

// 26.5.8.2.2, class template uniform_real_distribution
template<class RealType = double>
class uniform_real_distribution;

将我们链接到26.5.8.2.2以获取更多信息,但重要的是已在声明中。模板化类型名为RealType,位于

标准26.5.1.1 rand.req.genl] / 1

  

在整个第26.5节中,实例化模板的效果:

     
    

...     d)除非相应的模板,否则具有名为 RealType 的模板类型参数是未定义的     参数是cv-unqualified,是float,double或long double之一。