Проблемы при умножении двух собственных матриц на пользовательские скалярыC++

Программы на C++. Форум разработчиков
Anonymous
Проблемы при умножении двух собственных матриц на пользовательские скаляры

Сообщение Anonymous »

Я реализовал класс, который представляет собой специальный тип полиномов в трех переменных, включая перегрузки для ==, +=, -=, *=, +, -, *. Я проверил операторов, и они, кажется, работают нормально. Затем я добавил следующие Numtraits Специализация:

Код: Выделить всё

template struct NumTraits
 : GenericNumTraits
{
typedef Polynomial Real;
typedef Polynomial NonInteger;
typedef const Polynomial& Nested;

static inline Real epsilon() { return Polynomial(0); }
static inline Real dummy_precision() { return Polynomial(0); }
static inline int digits10() { return 0; }

enum {
IsInteger = 0,
IsSigned = 1,
IsComplex = 0,
RequireInitialization = 1,
ReadCost = Eigen::HugeCost,
AddCost = Eigen::HugeCost,
MulCost = Eigen::HugeCost
};
};
С приведенной выше специализацией я могу умножить матрицы с помощью моего полинома скалярного типа. Интересно, что если я сохраняю продукт в качестве собственного :: product вместо расчета матрицы непосредственно в собственном :: matrix , а затем вычисляю ее трассировку, я получаю правильный результат. Я понятия не имею, что вызывает это, и код Eigen, к сожалению, слишком сложный для меня, чтобы легко осмотреть себя. Я предполагаю, что Эйген переключается на более оптимизированный алгоритм умножения, когда матрицы больше, и что-то, что он делает в этом случае, не работает должным образом с моей нестандартной скалярной реализацией. При необходимости я добавлю больше информации после запроса.


Подробнее здесь: https://stackoverflow.com/questions/796 ... om-scalars

Вернуться в «C++»