Этот пример использует ex_scaled_double
модель, чтобы показать, как можно избежать потери точности путем переопределения типов данных в модели с масштабированным, удваивается.
В этой модели:
Типом выходных данных блока Constant является fixdt(1,8,4)
.
Блок Bitwise Operator использует AND
оператор и битовая маска 0xFF
передать входное значение выходу. Поскольку параметр Treat mask as устанавливается на Stored Integer
, блок выводит сохраненное целочисленное значение, S, его входа. Схема кодирования , где V является реальным значением, и Q является сохраненным целочисленным значением. Для получения дополнительной информации смотрите Масштабирование.
Откройте ex_scaled_double
модель. В командной строке MATLAB®, введите:
addpath(fullfile(docroot,'toolbox','fixpoint','examples')) ex_scaled_double |
Из галереи модели Apps выберите Fixed-Point Tool.
Fixed-Point Tool открывается.
В Fixed-Point Tool кликните по кнопке стрелки Collect Ranges. В меню выберите Use current settings. Нажмите Collect Ranges.
Запуски симуляции. Display
блок отображает 4.125
как выходное значение блока Constant. Stored Integer Display
блок отображает 0100 0010
, который является двоичным эквивалентом сохраненного целочисленного значения. Потеря точности происходит, потому что выходные данные вводят, fixdt(1,8,4)
, не может представлять выходное значение 4.1
точно.
В Fixed-Point Tool кликните по кнопке стрелки Collect Ranges. В меню выберите Scaled double-precision. Нажмите Collect Ranges.
Вы не можете использовать установку Data type override Double
потому что блок Bitwise Operator не поддерживает типы данных с плавающей точкой.
Симуляция запускается и на этот раз Display
блок правильно отображает 4.1
как выходное значение блока Constant. Stored Integer Display
блок отображает 65
, который является двоичным эквивалентом сохраненного целочисленного значения. Поскольку масштабируемое использование модели удваивается, чтобы заменить тип данных fixdt(1,8,4)
, скомпилированные выходные данные вводят изменения в flts8_En4
, то, которое является масштабированным, удваивается эквивалентный из fixdt(1,8,4)
. Никакая потеря точности не происходит, потому что масштабированное удваивается, сохраняют информацию о заданном типе данных и масштабировании, и они используют двойное, чтобы содержать хранимую сумму.