Этот пример показывает, как обнаружить переполнение с помощью функции fiaccel
. В числовой стадии тестирования в процессе преобразования инструмент моделирует масштабируемое использование фиксированной точки, удваивается. Это затем сообщает, какие выражения в сгенерированном коде производят значения, которые переполнили бы типа данных с фиксированной точкой.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup
, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).
Создайте локальную рабочую папку, например, 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;
Установите 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
Фаза тестирования численных данных все еще сообщает о переполнении, указывая, что это - сложение в выражении, которое переполняется.