Двойная точность и четверная точность в MATLAB

Я хочу преобразовать данные (двойная точность, 15 знаков после запятой) в данные другого типа (четырехкратная точность, 34 знака после запятой). Итак, я использовал vpaфункционировать следующим образом:

      data = sin(2*pi*frequency*time);
quad_data = vpa(data,34);

Но тип результата , а не double. И когда я проверил каждую ячейку symтип данных, 1x1 symбыл создан в каждой ячейке. я пытался использовать fftфункцию, использующую 'quad_data', но это не сработало. Есть ли какое-нибудь решение, с помощью которого я могу изменить десятичную точку двойного типа с 15 на 34?

2 ответа

В настоящее время MATLAB поддерживает только числовые типы с плавающей запятой: double, single и half. Типы расширенной точности могут быть достигнуты с помощью набора инструментов Symbolix (например, vpa) или стороннего кода (например, класс FEX High Precision Floating HPF Джона Д'Эррико). Но даже в этом случае обычно поддерживается только подмножество функций с плавающей запятой. Если функция, которую вы пытаетесь использовать, не поддерживает тип переменной, вам придется указать свою собственную функцию.

Кроме того, вы изначально неправильно строите объекты vpa. Обычно вы сначала конвертируете операнды в vpa, а затем выполняете над ними арифметические действия. Выполнение арифметических операций сначала с двойной точностью, как вы делаете с данными, а затем преобразование в расширенную точность vpa просто добавляет мусор к значениям. Например, сначала установите цифры, а затем используйте vpa('pi') для получения полной расширенной версии точности числа pi в качестве переменной vpa.

Для этой цели существует коммерческий сторонний набор инструментов, который называется Multiprecision Computing Toolbox for MATLAB.

Этот инструмент реализует многие математические операции, которые вы ожидаете от doubleвводы, и, согласно тестам на веб-сайте, это намного быстрее, чем vpa.

Раскрытие информации: я никоим образом не связан с создателями этого инструмента, однако могу сказать, что у нас был хороший опыт работы с этим инструментом для одного из проектов нашей лаборатории.


Другое предложение, которое я могу дать, - это выполнение высокоточных арифметических операций на другом языке\среде, для которых MATLAB предоставляет интерфейсы (например, C, python, java) и в которых должен быть реализован четырехъядерный тип данных.

Другие вопросы по тегам