Я пытаюсь объединить разреженные матрицы 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()
применительно к A(0,0)
не может вернуть ссылку на мульти-точность f
типа mpf_class
и, в свою очередь, применить operator/
между ссылками f
а также 2
, Вместо этого, кажется, что UBLAS лечит operator/
как собственный оператор, таким образом, будучи не в состоянии применить operator/
в f
Задача ещё не решена.