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