我想在指定的范围之间生成一个随机数,但是当我运行下面的代码时。它会产生错误,谁能解释一下错误吗?
#include <iostream>
#include <random>
using namespace std;
unsigned long int starting=2347483648;
unsigned long int ending=3994967296;
unsigned int rand(unsigned long int first,unsigned long int last)
{
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> distr(first, last);
return (unsigned int)distr(eng) << ' ';
}
int main()
{
cout<<rand(1,ending);//generate random number in this range
}
程序中断并出现错误。
无效的uniform_int的min和max参数
解释产生错误的原因,并告诉我如何在上述指定范围内生成随机数。
发布于 2014-01-13 09:47:18
试试这个:
std::uniform_int_distribution<unsigned long int> distr(first, last);
return (unsigned int)distr(eng);
}
我还删除了错误的<< ' '
,它是用空格左移的,而不是在输出中添加一个空格。
int main()
{
cout<<rand(1,ending) << " ";
}
当ending
(或最后一个)被转换为int时,它就变成了-300000000
。ending
也变成了max()
,所以ending
== distr.max()
。使用std::numeric_limits<int>::min()
,我们可以看到结果值可以适合于一个int。
https://stackoverflow.com/questions/21097856
复制相似问题