В этом примере показано, как обнаружить переполнение с помощью fiaccel функция. На этапе численного тестирования в процессе преобразования инструмент моделирует код с фиксированной точкой с помощью масштабированных двойников. Затем он сообщает, какие выражения в сгенерированном коде создают значения, которые будут переполнять тип данных с фиксированной точкой.
Для завершения этого примера необходимо установить следующие продукты:
MATLAB ®
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 to FullPrecision чтобы умножение не переполнялось, и затем запустите fiaccel снова команда.
fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''FullPrecision'', ''SumMode'', ''KeepLSB'')'; fiaccel -float2fixed fixptcfg overflow
Фаза проверки числовых значений по-прежнему сообщает о переполнении, указывая, что переполняется это дополнение в выражении.