Проблемы при умножении двух собственных матриц на пользовательские скаляры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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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