5

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の2番目のインスタンスを見逃しました。私がそれらの両方を手に入れたら、それはすべて行きます。

4

2 に答える 2

7

uniform_intデフォルトintは値型です。代わりに以下を使用してください。

boost::uniform_int<uint64_t> ...

次の行についても同じことが言えます。

boost::variate_generator<boost::mt19937&, boost::uniform_int<uint64_t> > ...
于 2010-08-16T04:01:51.727 に答える
2

boost::uniform_int<>64ビット整数型を使用していることを宣言で指定する必要があります。それ以外の場合は、デフォルトで32ビットタイプになります。

于 2010-08-16T04:02:34.110 に答える