В этом примере показано, как обнаружить переполнение с помощью fiaccel
функция. В числовой стадии тестирования в процессе преобразования инструмент симулирует масштабируемое использование фиксированной точки, удваивается. Это затем сообщает, какие выражения в сгенерированном коде производят значения, которые переполнили бы типа данных с фиксированной точкой.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения.
Создайте локальную рабочую папку, например, c:\overflow
.
Превратитесь в docroot\toolbox\fixpoint\examples
папка. В командной строке MATLAB, введите:
cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
Скопируйте overflow.m
и overflow_test.m
файлы к вашей локальной рабочей папке.
Это - лучшая практика, чтобы создать отдельный тестовый скрипт, чтобы сделать весь пред - и последующая обработка, такая как загрузка входных параметров, входных значений подготовки, вызывание функции под тестом и вывода результатов испытаний.
Ввод | Имя | Описание |
---|---|---|
Код функции | overflow.m | Функция MATLAB точки входа |
Тестовый файл | overflow_test.m | Скрипт MATLAB, который тестирует overflow.m |
Создайте coder.FixptConfig
объект, fixptcfg
, с настройками по умолчанию.
fixptcfg = coder.config('fixpt');
Определите имя испытательного стенда. В этом примере именем функции испытательного стенда является overflow_test
.
fixptcfg.TestBenchName = 'overflow_test';
Установите размер слова по умолчанию на 16.
fixptcfg.DefaultWordLength = 16;
fixptcfg.TestNumerics = true; fixptcfg.DetectFixptOverflows = true;
Установите 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
Фаза тестирования численных данных все еще сообщает о переполнении, указывая, что это - сложение в выражении, которое переполняется.