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

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

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

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

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

    • Блоком Constant Output data type является fixdt(1,8,4).

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

  2. От вкладки Simulink® Apps выберите Fixed-Point Tool.

  3. В Fixed-Point Tool выберите Collect Ranges> Use current settings. Нажмите Collect Ranges.

    Блок Display отображает 4.125 как выходное значение блока Constant. Блок Stored Integer Display отображает (SI) bin 0100 0010, который является двоичным эквивалентом сохраненного целочисленного значения. Потеря точности происходит, потому что выходные данные вводят, fixdt(1,8,4), не может представлять выходное значение 4.1 точно.

  4. Типы данных переопределения в модели с масштабированным удваиваются. В Fixed-Point Tool выберите Collect Ranges> Scaled double-precision. Нажмите Collect Ranges.

    Блок Display правильно отображает 4.1 как выходное значение блока Constant. Блок Stored Integer Display отображает (SI) 65, который является двоичным эквивалентом сохраненного целочисленного значения. Поскольку масштабируемое использование модели удваивается, чтобы заменить тип данных fixdt(1,8,4), скомпилированные выходные данные вводят изменения в flts8_En4, то, которое является масштабированным, удваивается эквивалентный из fixdt(1,8,4).

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

    Примечание

    Вы не можете использовать установку переопределения типа данных Double-precision, потому что блок Bitwise Operator не поддерживает типы данных с плавающей точкой.

Похожие темы