增强uBLAS库与GMP的多精度浮标相结合

时间:2014-04-28 13:04:06

标签: c++ boost matrix gmp ublas

我试图结合uBLAS'具有GMP多精度浮点数的稀疏矩阵。我将我的复杂源代码缩减为以下测试用例片段,由于某种原因拒绝编译:

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <gmpxx.h>
#include <iostream>

using namespace std;

int main() {
  namespace ublas = boost::numeric::ublas;

  ublas::mapped_matrix<mpf_class> A(1,1);
  mpf_class f(1, 64);

  A(0,0) = f;
  cout << A(0,0) / 2 << endl;
}

编译命令非常简单:

g++ -lgmpxx -lgmp test.cpp
test.cpp: In function 'int main()':
test.cpp:15:20: error: no match for 'operator/' in  boost::numeric::ublas::mapped_matrix<T, L, A>::operator()(boost::numeric::ublas::mapped_matrix<T, L, A>::size_type, boost::numeric::ublas::mapped_matrix<T, L, A>::size_type) [with T = __gmp_expr<__mpf_struct [1], __mpf_struct [1]>; L = boost::numeric::ublas::basic_row_major<>; A = boost::numeric::ublas::map_std<unsigned int, __gmp_expr<__mpf_struct [1], __mpf_struct [1]>, std::allocator<std::pair<const unsigned int, __gmp_expr<__mpf_struct [1], __mpf_struct [1]> > > >; boost::numeric::ublas::mapped_matrix<T, L, A>::reference = boost::numeric::ublas::sparse_matrix_element<boost::numeric::ublas::mapped_matrix<__gmp_expr<__mpf_struct [1], __mpf_struct [1]> > >; boost::numeric::ublas::mapped_matrix<T, L, A>::size_type = unsigned int](0u, 0u) / 2'

根据我对GCC的错误理解,应用于operator()的{​​{1}}无法返回对A(0,0)类型的多精度f的引用},然后在引用的mpf_classoperator/之间应用f。相反,似乎uBLAS将2视为自己的运营商,因此无法将operator/应用于operator/

0 个答案:

没有答案