exponenta event banner

Обнаружение переполнений

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

Предпосылки

Для завершения этого примера необходимо установить следующие продукты:

Создание новой папки и копирование соответствующих файлов

  1. Создайте локальную рабочую папку, например: c:\overflow.

  2. Изменение на docroot\toolbox\fixpoint\examples папка. В командной строке MATLAB введите:

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. Копировать overflow.m и overflow_test.m в локальную рабочую папку.

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

    НапечататьИмяОписание
    Код функцииoverflow.mНачальная функция MATLAB
    Тестовый файлoverflow_test.mСценарий MATLAB, который тестирует overflow.m

 Функция переполнения

 Функция overflow_test

Настройка объекта конфигурации

  1. Создать coder.FixptConfig объект, fixptcfg, с настройками по умолчанию.

    fixptcfg = coder.config('fixpt');
  2. Задайте имя испытательного стенда. В этом примере имя функции тестового стенда: overflow_test.

    fixptcfg.TestBenchName = 'overflow_test';
  3. Задайте длину слова по умолчанию 16.

    fixptcfg.DefaultWordLength = 16;

Включить обнаружение переполнения

fixptcfg.TestNumerics = true;
fixptcfg.DetectFixptOverflows = true;

Задать параметры fimath

Установите fimath Product mode и Sum mode кому KeepLSB. Эти настройки моделируют поведение целочисленных операций на языке C.

fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''KeepLSB'', ''SumMode'', ''KeepLSB'')';

Преобразовать в фиксированную точку

Преобразование функции MATLAB с плавающей запятой, overflow, к коду MATLAB с фиксированной точкой. Нет необходимости указывать типы ввода для fiaccel потому что она выводит типы из тестового файла.

fiaccel -float2fixed fixptcfg overflow

Этап проверки числовых значений сообщает о переполнении.

Overflow error in expression 'acc + b( j )*z( k )'. Percentage of Current Range = 104%.

Обзор результатов

Определите, переполнено ли сложение или умножение в этом выражении. Установите fimath ProductMode to FullPrecision чтобы умножение не переполнялось, и затем запустите fiaccel снова команда.

fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''FullPrecision'', ''SumMode'', ''KeepLSB'')';
fiaccel -float2fixed fixptcfg overflow

Фаза проверки числовых значений по-прежнему сообщает о переполнении, указывая, что переполняется это дополнение в выражении.