2010-08-16 12 views
5

के साथ यादृच्छिक 64 बिट इनट्स कैसे उत्पन्न करें मैं बूस्ट यादृच्छिक, का उपयोग कर यादृच्छिक 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

सही, सुराग त्रुटि संदेश में है: '[IntType = int] के साथ '। –

+1

और 'uint64_t'' boost/cstdint.hpp> 'में पाया जा सकता है। – GManNickG

+0

वादा किया वादा किया, लेकिन अब यह संकलन नहीं करता है। मेरा अद्यतन प्रश्न देखें। – Matt

2

आप boost::uniform_int<> की अपनी घोषणा में निर्दिष्ट करने के लिए है कि आप एक 64 बिट पूर्णांक प्रकार का उपयोग कर रहे जरूरत है। अन्यथा यह defaults 32 बिट प्रकार के लिए।

+0

यह वादा किया गया लगता है, लेकिन अब यह संकलित नहीं करता है। अद्यतन प्रश्न देखें। – Matt

संबंधित मुद्दे