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

Этот пример показывает, как обнаружить переполнение с помощью функции 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 Опции

Установите Product mode fimath и 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

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