1
我一直在遵循documentation from the boost library生成多精度隨機整數,但在文檔中沒有提到如何設置種子。Boost Multiprecision隨機發生器種子錯誤
我想不出如何設置種子沒有得到編譯錯誤。
#include <boost/multiprecision/gmp.hpp>
#include <boost/multiprecision/random.hpp>
#include <fstream>
using namespace boost::multiprecision;
using namespace boost::random;
using namespace std;
//...
typedef independent_bits_engine<mt19937, N_BITS, mpz_int> generator_type;
int main()
{
// ...
generator_type gen;
seed_seq sed_seq = { 12064, 3867, 13555, 28676, 4599, 5031, 13040 };
gen.seed(sed_seq);
// ...
for(unsigned i = 0; i < SS; ++i) {
out
<< gen()
<< endl;
}
out.close();
return 0;
}
我如何編譯:
$ g++ generateinputs.cpp -o generateinputs.o -L/gmp_install/lib -lgmp
這是編譯錯誤,我得到:
generateinputs.cpp: In function ‘int main()’:
generateinputs.cpp:35:68: error: in C++98 ‘sed_seq’ must be initialized by constructor, not by ‘{...}’
seed_seq sed_seq = { 12064, 3867, 13555, 28676, 4599, 5031, 13040 };
^
generateinputs.cpp:35:68: error: could not convert ‘{12064, 3867, 13555, 28676, 4599, 5031, 13040}’ from ‘<brace-enclosed initializer list>’ to ‘boost::random::seed_seq’
我也試圖與C++ 11,但我仍然編譯有錯誤。你能告訴我它是如何完成的嗎?
與C++ 11
$ g++ -std=c++11 generateinputs.cpp -o generateinputs.o -L/gmp_install/lib -lgmp
結果編譯:
generateinputs.cpp:26:9: error: reference to ‘independent_bits_engine’ is ambiguous
typedef independent_bits_engine<mt19937, N_BITS, mpz_int> generator_type;
In file included from /usr/include/c++/4.8/random:50:0,
from /usr/include/c++/4.8/bits/stl_algo.h:65,
from /usr/include/c++/4.8/algorithm:62,
from /usr/include/boost/math/tools/config.hpp:16,
from /usr/include/boost/math/policies/error_handling.hpp:18,
from /usr/include/boost/multiprecision/detail/default_ops.hpp:9,
from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
from /usr/include/boost/multiprecision/number.hpp:22,
from /usr/include/boost/multiprecision/gmp.hpp:9,
from generateinputs.cpp:8:
/usr/include/c++/4.8/bits/random.h:1074:11: note: candidates are: template<class _RandomNumberEngine, long unsigned int __w, class _UIntType> class std::independent_bits_engine
class independent_bits_engine
In file included from /usr/include/boost/random.hpp:38:0,
from /usr/include/boost/multiprecision/random.hpp:31,
from generateinputs.cpp:9:
/usr/include/boost/random/independent_bits.hpp:44:7: note: template<class Engine, long unsigned int w, class UIntType> class boost::random::independent_bits_engine
class independent_bits_engine
generateinputs.cpp:26:9: error: ‘independent_bits_engine’ does not name a type
typedef independent_bits_engine<mt19937, N_BITS, mpz_int> generator_type;
generateinputs.cpp: In function ‘int main()’:
generateinputs.cpp:33:6: error: ‘generator_type’ was not declared in this scope
generator_type gen;
generateinputs.cpp:33:21: error: expected ‘;’ before ‘gen’
generator_type gen;
generateinputs.cpp:36:2: error: reference to ‘seed_seq’ is ambiguous
seed_seq sed_seq = { 12064, 3867, 13555, 28676, 4599, 5031, 13040 };
In file included from /usr/include/c++/4.8/random:50:0,
from /usr/include/c++/4.8/bits/stl_algo.h:65,
from /usr/include/c++/4.8/algorithm:62,
from /usr/include/boost/math/tools/config.hpp:16,
from /usr/include/boost/math/policies/error_handling.hpp:18,
from /usr/include/boost/multiprecision/detail/default_ops.hpp:9,
from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
from /usr/include/boost/multiprecision/number.hpp:22,
from /usr/include/boost/multiprecision/gmp.hpp:9,
from generateinputs.cpp:8:
/usr/include/c++/4.8/bits/random.h:6025:9: note: candidates are: class std::seed_seq
class seed_seq
In file included from /usr/include/boost/random.hpp:53:0,
from /usr/include/boost/multiprecision/random.hpp:31,
from generateinputs.cpp:9:
/usr/include/boost/random/seed_seq.hpp:39:7: note: class boost::random::seed_seq
class seed_seq {
generateinputs.cpp:36:11: error: expected ‘;’ before ‘sed_seq’
seed_seq sed_seq = { 12064, 3867, 13555, 28676, 4599, 5031, 13040 };
generateinputs.cpp:37:2: error: ‘gen’ was not declared in this scope
gen.seed(sed_seq);
generateinputs.cpp:37:11: error: ‘sed_seq’ was not declared in this scope
gen.seed(sed_seq);
確保您的標誌'-std = C++ 11'添加到編輯命令。 – vsoftco
@vsoftco我加入了對C++的11 –