Используйте масштабированный, удваивается, чтобы избежать потери точности

Этот пример использует модель ex_scaled_double, чтобы показать, как можно избежать, чтобы потеря точности путем переопределения типов данных в модели с масштабированным удвоилась.

О модели

В этой модели:

  • Типом выходных данных блока Constant является fixdt(1,8,4).

  • Блок Bitwise Operator использует оператор AND и битовую маску 0xFF, чтобы передать входное значение выводу. Поскольку параметр Treat mask as устанавливается на Stored Integer, блок выводит сохраненное целочисленное значение, S, его входа. Схема кодирования V=SQ+B, где V является реальным значением, и Q является сохраненным целочисленным значением. Для получения дополнительной информации смотрите Масштабирование.

Выполнение примера

  1. Откройте модель ex_scaled_double. В командной строке MATLAB®, введите:

    addpath(fullfile(docroot,'toolbox','fixpoint','examples'))
    ex_scaled_double

  2. Из образцового меню выберите Analysis> Data Type Design> Fixed-Point Tool.

    Fixed-Point Tool открывается.

  3. В 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 точно.

  4. В 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). Никакая потеря точности не происходит, потому что масштабированное удваивается, сохраняют информацию о заданном типе данных и масштабировании, и они используют двойное, чтобы содержать хранимую сумму.