我正在尝试将 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
对 type 的多精度的引用mpf_class
,并反过来应用被引用的和operator/
之间的引用。相反,似乎 uBLAS 将其视为自己的运营商,因此无法适用于f
2
operator/
operator/
f