Лучший базовый тип для контакта с линейной алгеброй

После ожидания почти 25 минут он волшебным образом разобрался.

Для людей, читающих это, пожалуйста, будьте терпеливы, если вы получаете эту ошибку, и консоль говорит, что все включено Это занимает гораздо больше времени.

5
задан Jason S 24 December 2008 в 03:30
поделиться

6 ответов

Я записал использованию библиотеки линейной алгебры C++ шаблоны. Моя мысль была то, что мы могли бы хотеть использовать комплексные числа или числа расширенной точности однажды. Это было, возможно, семь лет назад, и мы еще не сделали этого. Мы почти всегда используем, удваивается как шаблонный тип, и у нас есть определения типов для создания этого легким.

Несколько раз мы пошли другим путем, с помощью типов, меньших, чем двойное. Например, мы использовали плавание, а не дважды в ограниченном памятью приложении, описанном здесь. Но 99,9 процентов времени, которое мы используем, удваиваются.

При использовании аргумента шаблона не упустите использование целого типа, но неявно требование типа с плавающей точкой. Например, скажите, что у Вас есть матрица, записи которой являются всеми целыми числами и таким образом, Вы используете матричный <международный> класс. Но затем Вы передаете это линейному решателю. Теперь Ваша арифметика сделана с помощью целочисленного деления, и результаты являются неправильными. (Я сделал это!)

4
ответ дан 18 December 2019 в 09:54
поделиться

Я реализовал бы класс/структуру с помощью шаблона. В начале Вы, скорее всего, будете удовлетворены просто double, но я нашел, что в каждом проекте, где я не реализовал матрицы как шаблоны, я позже сожалел о нем.

Кроме того, это дает Вам возможность использовать более интересную алгебру элемента - арифметика интервала, распределения вероятностей, сложная математика, соответствие фиксированной точки, подматрицы, простая математика :-), и т.д.

6
ответ дан 18 December 2019 в 09:54
поделиться

Не делайте дополнительную работу для себя. Если можно обойтись двойным (или долго удваиваться), идут с этим.

Это кажется, что это - просто немного проекта, в этом случае шаблонная вещь просто сделает работу для Вас.

Другая опция, которая не была обсуждена, использует шаблон для определения типа элемента. Это не вызывает много, если таковые имеются, дополнительную работу, но позволяет некоторые изменения позже.

1
ответ дан 18 December 2019 в 09:54
поделиться

Я пишу небольшую и несоответствующую библиотеку линейной алгебры в C++ для проекта (я сожалею),

АЙ! Будьте осторожны, быть очень очень осторожными... Выезд JAMA/TNT - это имеет штамп одобрения NIST на нем, и они уже обработали часть "более простой" математики линейной алгебры, например, различных алгоритмов факторинга. Линейная алгебра включает много щекотливых вопросов с числовой точностью (например, Гильбертовы матрицы) и так, как мне нравится делать мою собственную вещь, это - одна из тех областей, где Вы могли бы хотеть использовать хорошую прочную основу, это было уже хорошо протестировано.

Необходимо смочь использовать долго дважды с ним (не совсем уверенный в этом), но сами алгоритмы, вероятно, более очень важны, чем точность матриц.

4
ответ дан 18 December 2019 в 09:54
поделиться

Заключительный ответ вопроса: Да, существует, это называют long double и по крайней мере так же точно как double. Поскольку, использовать ли шаблоны или нет, да, я использовал бы шаблоны. Это - большой вариант использования для них, и я думаю, что он сделает портирование на некоторый другой скалярный тип числа легче. Вы можете затем также просто определение типа плавание и/или двойная матрица, в зависимости от системы, на которой Вы работаете и какой работает быстрее/лучше там.

2
ответ дан 18 December 2019 в 09:54
поделиться

Нет никакого другого типа, более точного, чем длинный двойной, который также имеет поддержку оборудования. Но Вы свободны сделать свои собственные типы, если Вы чувствуете потребность в большей точности. Они однако будут вполне медленнее, чем собственный двойной тип, даже с обширной оптимизацией.

0
ответ дан 18 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: