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

В этом примере показано, как обнаружить переполнение с помощью 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 к FullPrecision так, чтобы умножение не переполнялось, и затем запускалось fiaccel управляйте снова.

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

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