2010-08-16 31 views
5

Estoy tratando de generar un entero sin signo aleatorio de 64 bits usando boost random, pero obtengo un error de aserción con uniform_int.Cómo generar entradas aleatorias de 64 bits con impulso aleatorio

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

Esto es lo que se pone en la línea de salida 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: Con base en sus respuestas, he tratado de especificar el tamaño de abajo:

boost:uniform_int<uint64_t> .... 

Pero tengo la siguiente error de compilación:

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, se perdió la segunda instancia de boost :: uniform_int. Una vez que los tengo a los dos, todo se va.

Respuesta

7

uniform_int tiene como valor predeterminado int como tipo de valor. Utilice el siguiente lugar:

boost::uniform_int<uint64_t> ... 

Lo mismo ocurre con la siguiente línea:

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

Derecha, la pista está en el mensaje de error: '[with IntType = int]'. –

+1

Y 'uint64_t' se puede encontrar en' '. – GManNickG

+0

sonaba prometedor, pero ahora no compila. Ver mi pregunta actualizada – Matt

2

es necesario que especifique en su declaración de boost::uniform_int<> que está utilizando un tipo entero de 64 bits. De lo contrario, defaults a un tipo de 32 bits.

+0

Eso sonaba prometedor, pero ahora no compila. Ver pregunta actualizada – Matt

Cuestiones relacionadas