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

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