2010-08-16 71 views
5

我试图生成随机使用boost随机64位无符号整数, 但我得到了与uniform_int断言失败。如何随机生成随机64位整数

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的第二个实例。一旦我得到了他们两个,一切都会结束。

回答

7

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

boost::uniform_int<uint64_t> ... 

这同样适用于以下行:

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

对,线索出错信息:'[with IntType = int]'。 – 2010-08-16 04:03:15

+1

'uint64_t'可以在''中找到。 – GManNickG 2010-08-16 04:19:19

+0

听起来很有希望,但现在不编译。看到我更新的问题。 – Matt 2010-08-16 04:35:31

2

你需要在你的boost::uniform_int<>声明指定你使用的是64位整数类型。否则它将defaults设置为32位类型。

+0

听起来很有希望,但现在不编译。查看更新的问题。 – Matt 2010-08-16 04:31:27