Wie man random random 64-Bit ints mit Boost erzeugen
-
28-09-2019 - |
Frage
Ich versuche, eine zufälliges 64-Bit-Integer-mit boost unsigned zu erzeugen zufälligen, aber ich bin immer einen Assertionsfehler mit 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();
Hier ist, was ausgegeben wird in Zeile 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: Basierend auf Ihren Antworten, habe ich versucht, die Größe angeben, mit unter:
boost:uniform_int<uint64_t> ....
Aber ich bekomme die folgenden 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, die zweite Instanz von boost :: uniform_int verpasst. Sobald ich sie beide bekam, es ist alles gehen.
Lösung
uniform_int
standardmäßig int
als die Werttyp. Gehen Sie wie folgt statt:
boost::uniform_int<uint64_t> ...
Das gleiche gilt für die folgende Zeile:
boost::variate_generator<boost::mt19937&, boost::uniform_int<uint64_t> > ...
Andere Tipps
Sie müssen in Ihrer Erklärung boost::uniform_int<>
angeben, dass Sie einen 64-Bit-Integer-Typen verwenden. Andernfalls es defaults auf eine 32-Bit-Typ .