2010-08-16 6 views
5

Ich versuche, eine zufällige 64bit unsigned Integer mit Boost zufällig, zu generieren, aber ich bekomme einen Assertion Fehler mit uniform_int.So generieren Sie zufällige 64-Bit-Ints mit Boost zufällig

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(); 

ist hier, was Ausgang an der Leitung 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. 

EDIT bekommt: Basierend auf Ihren Antworten, habe ich versucht, die Größe mit unten angeben:

boost:uniform_int<uint64_t> .... 

Aber ich bekomme die folgender Kompilierungsfehler:

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 

EDIT: ok, habe die zweite Instanz von boost :: uniform_int verpasst. Sobald ich beide habe, geht alles.

Antwort

7

uniform_int Standardwert ist int als Werttyp. Verwenden Sie die folgenden statt:

boost::uniform_int<uint64_t> ... 

Gleiches gilt für die folgende Zeile geht:

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

Rechts ist der Hinweis in der Fehlermeldung: '[with IntType = int]'. –

+1

Und 'uint64_t' kann in' 'gefunden werden. – GManNickG

+0

klang vielversprechend, aber es kompiliert jetzt nicht. Siehe meine aktualisierte Frage. – Matt

2

Sie müssen in Ihrer Erklärung von boost::uniform_int<> angeben, die Sie verwenden eine 64-Bit-Integer-Typ. Sonst ist es defaults zu einem 32-Bit-Typ.

+0

Das klang vielversprechend, aber es kompiliert jetzt nicht. Siehe aktualisierte Frage. – Matt