Я пытаюсь реализовать некоторые высокоточные вычисления в C ++ с использованием Boost.Multiprecision и Boost.uBLAS в VS 2010 Express. Однако даже в простейшем случае мой код не компилируется, что приводит к следующей ошибке:
ошибка C2677: двоичный файл «+ =»: не найден глобальный оператор, который принимает тип «boost :: multiprecision :: detail :: expression» (или нет приемлемого преобразования) c: \ программные файлы (x86) \ boost_1_53_0 \ boost \ numeric \ ublas \ functions.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.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> >
как тип для числа с плавающей запятой высокой точности, создайте две матрицы E и m — это прекрасно работает. Однако, если я пытаюсь умножить их, используя prod, код не скомпилируется. Часто задаваемые вопросы доступно здесь предлагает явно привести все аргументы prod к типу высокой точности, но prod(static_cast<matrix<number<cpp_dec_float<50> > > >(E),static_cast<matrix<number<cpp_dec_float<50> > > >(m) )
не помогает
Есть идеи о том, чего мне еще не хватать? Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …