C++ 随机数生成器最小值和最大值有界,不工作?

C++ 随机数生成器最小值和最大值有界,不工作?,c++,c++11,random,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); std::随机设备rd; 标准:mt19937 mt(rd()); 标准:均匀实分布区(0,4000); 无符号短随机数=距离(mt); 但是,返

我使用以下代码选择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);
std::随机设备rd;
标准:mt19937 mt(rd());
标准:均匀实分布区(0,4000);
无符号短随机数=距离(mt);

但是,返回的值是24583?

您需要将代码更改为:

std::统一内部分布区(04000);
当前使用的
std::uniform\u real\u分布
预期仅用于浮点类型


至于标准,因为我喜欢引用

在标准(N3797)26.5.2
[rand.symposis]
中,其中一项是
std::uniform\u real\u发行的声明

// 26.5.8.2.2, class template uniform_real_distribution
template<class RealType = double>
class uniform_real_distribution;
//26.5.8.2.2,类模板统一实分布
样板
类均匀实分布;
这将我们链接到26.5.8.2.2以获取更多信息,但重要的是在声明中已经有了。模板化的类型名为
RealType
,位于

标准26.5.1.1
rand.req.genl]
/1

在本第26.5款中,实例化模板的效果:

。。。 d) 具有名为RealType的模板类型参数的未定义,除非相应的模板 参数是cv非限定参数,并且是浮点、双精度或长双精度参数之一


您需要将代码更改为:

std::统一内部分布区(04000);
当前使用的
std::uniform\u real\u分布
预期仅用于浮点类型


至于标准,因为我喜欢引用

在标准(N3797)26.5.2
[rand.symposis]
中,其中一项是
std::uniform\u real\u发行的声明

// 26.5.8.2.2, class template uniform_real_distribution
template<class RealType = double>
class uniform_real_distribution;
//26.5.8.2.2,类模板统一实分布
样板
类均匀实分布;
这将我们链接到26.5.8.2.2以获取更多信息,但重要的是在声明中已经有了。模板化的类型名为
RealType
,位于

标准26.5.1.1
rand.req.genl]
/1

在本第26.5款中,实例化模板的效果:

。。。 d) 具有名为RealType的模板类型参数的未定义,除非相应的模板 参数是cv非限定参数,并且是浮点、双精度或长双精度参数之一


这与我最初的问题略有不同,但您知道我如何创建x位小数的随机浮点数吗?我知道如何创建随机浮点数,但不知道小数点后x位。@user997112这与我原来的问题略有不同,但你知道如何创建小数点后x位的随机浮点数吗?我知道如何创建随机浮点数,但不知道小数点后x位。@user997112