exponenta event banner

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

В этом примере показано, как обнаружить переполнение с помощью приложения Fixed-Point Converter. На этапе численного тестирования в процессе преобразования можно смоделировать код Fixed-Point с помощью масштабированных двойников. Затем приложение сообщает, какие выражения в сгенерированном коде создают значения, которые переполняют тип данных с фиксированной точкой.

Предпосылки

В этом примере требуются следующие продукты:

Создание новой папки и копирование соответствующих файлов

  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. Перейдите к рабочей папке, содержащей файл для этого примера.

  2. На вкладке Приложения MATLAB Toolstrip в разделе Создание кода щелкните значок приложения.

Выбор исходных файлов

  1. Добавление функции точки входа overflow в проект, перейдите к файлу overflow.mи нажмите кнопку Открыть. По умолчанию приложение сохраняет информацию и параметры этого проекта в текущей папке в файле с именем overflow.prj.

  2. Нажмите кнопку Далее (Next), чтобы перейти к шагу Определить типы ввода (Define Input Types).

    Экраны приложений overflow.m для нарушений кода и проблем готовности к преобразованию с фиксированной точкой. Приложение не находит проблем в overflow.m.

Определение типов ввода

  1. На странице Определить типы ввода (Define Input Types), чтобы добавить overflow_test в качестве тестового файла перейдите к overflow_test.mи нажмите кнопку Открыть.

  2. Щелкните Автоопределить типы ввода (Autodefine Input Types).

    Тестовый файл запускается. Приложение определяет из тестового файла тип ввода b является double(1x12), x является double(256x1), и reset является logical(1x1).

  3. Нажмите кнопку Далее (Next), чтобы перейти к шагу Преобразовать в фиксированную точку (Convert to Fixed Point).

Преобразовать в фиксированную точку

  1. Приложение создает инструментальную функцию MEX для исходной функции MATLAB. Приложение отображает скомпилированную информацию - тип, размер и сложность - для переменных в коде. Дополнительные сведения см. в разделе Просмотр и изменение информации о переменных.

    На вкладке Замены функций приложение отображает функции, которые не поддерживаются для преобразования с фиксированной точкой. См. раздел Выполнение моделирования.

  2. Чтобы просмотреть параметры fimath, щелкните стрелку «Параметры». Установите режим fimath Product и режим Sum в значение KeepLSB. Эти настройки моделируют поведение целочисленных операций на языке C.

  3. Щелкните Анализ (Analyze).

    тестовый файл, overflow_test, бежит. Приложение отображает минимальный и максимальный диапазоны моделирования на вкладке Переменные. Используя данные диапазона моделирования, программа предлагает типы фиксированных точек для каждой переменной на основе настроек предложения типа по умолчанию и отображает их в столбце Предлагаемый тип.

  4. Чтобы преобразовать алгоритм с плавающей запятой в фиксированную, нажмите кнопку «Преобразовать».

    Программное обеспечение проверяет правильность предлагаемых типов и генерирует фиксированную версию функции начального уровня.

    Если во время проверки возникают ошибки и предупреждения, приложение отображает их на вкладке Вывод. См. раздел Проверка типов.

Проверка номеров и проверка переполнений

  1. Щелкните стрелку Test. Убедитесь, что тестовый файл overflow_test.m. Выберите Использовать масштабированные двойные значения для обнаружения переполнений и нажмите кнопку Проверить.

    Приложение запускает тестовый файл, который использовался для определения типов ввода для тестирования кода MATLAB с фиксированной точкой. Поскольку было выбрано обнаружение переполнений, моделирование также выполняется с использованием масштабированных двойных версий предлагаемых типов фиксированных точек. Масштабированные двойники хранят свои данные в плавающей точке с двойной точностью, поэтому выполняют арифметику в полном диапазоне. Поскольку они сохраняют свои настройки фиксированной точки, они могут сообщать, когда вычисления выходят за пределы диапазона типа фиксированной точки.

    Моделирование выполняется. Приложение обнаруживает переполнение. Приложение сообщает о переполнении на вкладке Переполнение. Чтобы выделить переполненное выражение, щелкните переполнение.

  2. Определите, была ли это сумма или перемножение, которое переполнилось.

    В настройках fimath установите для параметра Product mode значение FullPrecision, а затем повторите преобразование и проверьте код с фиксированной точкой еще раз.

    Переполнение по-прежнему происходит, указывая, что переполняется именно дополнение в выражении.