1

我正在尝试在 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;
 }

我使用 anumber<cpp_dec_float<50> >作为高精度浮点数的类型,实例化两个矩阵 E 和 m - 这很好用。但是,如果我尝试使用 prod 将它们相乘,则代码无法编译。此处提供的多精度常见问题解答建议将 prod 的所有参数显式转换为高精度类型,但prod(static_cast<matrix<number<cpp_dec_float<50> > > >(E),static_cast<matrix<number<cpp_dec_float<50> > > >(m) )无济于事。

知道我还缺少什么吗?提前致谢。

4

0 回答 0