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

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

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