我试图在VS 2010 Express中使用Boost.Multiprecision和Boost.uBLAS在C ++中实现一些高精度计算。但即使在最简单的情况下,我的代码也无法编译,从而产生以下错误:
错误C2677:二进制'+ =':找不到全局运算符,它接受类型'boost :: multiprecision :: detail :: expression'(或者没有可接受的转换)c:\ program files(x86)\ boost_1_53_0 \ boost \ numeric \ ublas \ functional.hpp 1176
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::multiprecision;
using namespace boost::numeric::ublas;
int main(int, char**)
{
matrix<number<cpp_dec_float<50> > > m (3, 3);
matrix<number<cpp_dec_float<50> > > E (3, 3);
E=prod(E,m);
return 0;
}
编译器抱怨的行是在ublas的functional.hpp中:
template<class E1, class E2>
static BOOST_UBLAS_INLINE
result_type apply (const matrix_expression<E1> &e1,
const matrix_expression<E2> &e2,
size_type i, size_type j) {
size_type size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
result_type t = result_type (0);
for (size_type k = 0; k < size; ++ k)
t += e1 () (i, k) * e2 () (k, j); //here the error arises
return t;
}
我使用number<cpp_dec_float<50> >
作为高精度浮点数的类型,实例化两个矩阵E和m - 这很好用。但是,如果我尝试使用prod将它们相乘,则代码无法编译。 Multiprecision FAQ available here建议将prod的所有参数显式地转换为高精度类型,但prod(static_cast<matrix<number<cpp_dec_float<50> > > >(E),static_cast<matrix<number<cpp_dec_float<50> > > >(m) )
没有帮助。
我还有什么想法可以丢失吗?提前谢谢。