我正在尝试使用Boost Random生成随机的64位未签名整数,但是我使用Uniform_int获得断言失败。

struct timeval tv;
boost::mt19937 randGen(tval.tv_usec);
boost::uniform_int<> uInt64Dist(0, std::numeric_limits<uint64_t>::max());
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > getRand(randGen, uInt64Dist);
uint64_t clock_seq_= getRand();

这是在第3行中获取输出的原因。

main:/usr/include/boost/random/uniform_int.hpp:48: boost::uniform_int<IntType>::uniform_int(IntType, IntType) [with IntType = int]: Assertion `min_arg <= max_arg' failed.

编辑:根据您的答案,我尝试用以下方式指定大小:

boost:uniform_int<uint64_t> ....

但是我得到以下汇编错误:

spec.cpp: In member function ‘void Specifier::initialize()’:
spec.cpp:58: error: no matching function for call to ‘boost::variate_generator<boost::mt19937&, boost::uniform_int<int> >::variate_generator(boost::mt19937&, boost::uniform_int<long unsigned int>&)’
/usr/include/boost/random/variate_generator.hpp:97: note: candidates are: boost::variate_generator<Engine, Distribution>::variate_generator(Engine, Distribution) [with Engine = boost::mt19937&, Distribution = boost::uniform_int<int>]
/usr/include/boost/random/variate_generator.hpp:87: note:                 boost::variate_generator<boost::mt19937&, boost::uniform_int<int> >::variate_generator(const boost::variate_generator<boost::mt19937&, boost::uniform_int<int> >&)
make: *** [spec.o] Error 1

编辑:好的,错过了boost :: Uniform_int的第二个实例。一旦我得到了两个,一切都走了。

有帮助吗?

解决方案

uniform_int 默认为 int 作为值类型。改用以下内容:

boost::uniform_int<uint64_t> ...

以下行也是如此:

boost::variate_generator<boost::mt19937&, boost::uniform_int<uint64_t> > ...

其他提示

您需要在您的声明中指定 boost::uniform_int<> 您正在使用64位整数类型。否则 默认 到32位类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top