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;
 }

number<cpp_dec_float<50> >高精度浮動小数点数の型として aを使用し、 2 つの行列 E と m をインスタンス化します - これは問題なく動作します。ただし、prod を使用してそれらを乗算しようとすると、コードはコンパイルに失敗します。ここで利用可能なMultiprecision FAQは、 pro のすべての引数を高精度型に明示的にキャストすることを提案していますが、prod(static_cast<matrix<number<cpp_dec_float<50> > > >(E),static_cast<matrix<number<cpp_dec_float<50> > > >(m) )役に立ちません。

まだ何が欠けているのでしょうか?前もって感謝します。

4

0 に答える 0