Оператор сложения и замена оператора вычитания кода

Рассмотрите следующее при определении отображений для замен оператора сложения и оператора вычитания кода.

Опции алгоритма

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

  • Бросок перед операцией (CBO), значение по умолчанию — До выполнения операции сложения или операции вычитания, тип алгоритма бросает входные значения к выходному типу. Если тип выходных данных не может точно представлять входные значения, потери могут произойти в результате броска с выходным типом. Дополнительная потеря может произойти, когда результат операции брошен к типу окончательного результата.

  • Бросок после операции (CAO) — алгоритм вычисляет идеальный результат операции сложения или операции вычитания двух входных параметров. Алгоритм затем вводит, бросает результат к типу выходных данных. Потеря происходит во время броска типа. Этот алгоритм ведет себя так же на язык C кроме тех случаев, когда со знаком из операндов не соответствует. Например, когда вы добавляете длинный операнд со знаком в длинный операнд без знака, стандартные правила языка C преобразовывают длинный операнд со знаком в длинный операнд без знака. Результатом является значение, которое не идеально.

Интерактивная спецификация с заменяющим инструментом кода

Когда вы используете Заменяющий Инструмент Кода, чтобы создать заменяющую запись таблицы кода для операции сложения или операции вычитания, инструмент отображает меню Algorithm. Используйте то меню, чтобы задать Cast before operation или алгоритм Cast after operation для той записи.

Программируемая спецификация

Создайте заменяющий табличный файл кода как функция MATLAB®, которая описывает заменяющую запись таблицы сложения или вычитания кода. В вызове setTflCOperationEntryParameters, набор, по крайней мере, эти параметры:

  • Key к RTW_OP_ADD или RTW_OP_MINUS

  • ImplementationName к имени вашей заменяющей функции

  • EntryInfoAlgorithm к RTW_CAST_BFORE_OP (бросок перед операцией) или RTW_CAST_AFTER_OP (бросок после операции)

Этот пример устанавливает параметры для заменяющей записи оператора кода для реализации броска после операции сложения uint8.

op_entry = RTW.TflCOperationEntry;
setTflCOperationEntryParameters(op_entry, ...
                   'Key',                      'RTW_OP_ADD', ...
                   'EntryInfoAlgorithm',       'RTW_CAST_AFTER_OP', ...
                   'ImplementationName',       'u8_add_u8_u8');

Для получения дополнительной информации смотрите setTflCOperationEntryParameters.

Классификация алгоритмов

Во время генерации кода генератор кода исследует операции сложения и операции вычитания, включая смежные операции броска типа, чтобы определить тип алгоритма, чтобы вычислить результат выражения. На основе типов данных в выражении и типе аккумулятора (тип раньше содержал результат операции сложения или операции вычитания), генератор кода использует эти правила.

  • Типы с плавающей точкой только

    Введите 1 тип данныхВведите 2 типа данныхТип данных аккумулятора Тип выходных данныхКлассификация
    doubledoubledoubledoubleCBO, ГЛАВНЫЙ АДМИНИСТРАТОР
    doubledoubledoublesingle
    doubledoublesingledouble
    doubledoublesinglesingleCBO
    doublesingledoubledoubleCBO, ГЛАВНЫЙ АДМИНИСТРАТОР
    doublesingledoublesingle
    doublesinglesingledouble
    doublesinglesinglesingleCBO
    singlesinglesinglesingleCBO, ГЛАВНЫЙ АДМИНИСТРАТОР
    singlesinglesingledouble
    singlesingledoublesingle
    singlesingledoubledoubleCBO, ГЛАВНЫЙ АДМИНИСТРАТОР

  • С плавающей точкой и фиксированные точки на мгновенном сложении или операции вычитания

    АлгоритмУсловия
    CBO

    Одно из следующего верно:

    • Типом операции является double.

    • Типом операции является single, и входными типами является single или фиксированная точка.

    Главный администраторТип операции является надмножеством входных типов — то есть, выходной тип может представлять значения входных типов без потери данных.

  • Фиксированные точки только

    АлгоритмУсловия
    CBO

    По крайней мере одно из следующего верно:

    • Тип аккумулятора равняется выходному типу (Tacc == Tout).

    • Выходной тип является надмножеством входных типов (Tacc >= {Tin1, Tin2}), и тип аккумулятора является надмножеством выходного типа (Tacc >= Tout).

    • Операция не подвергается потеря точности или область значений.

    Главный администраторСетевое смещение является нулем, и типы данных в выражении имеют равные наклонные поправочные коэффициенты. Для получения дополнительной информации о сетевом смещении см. “Сложение” или “Вычитание” в Замене Оператора неподвижной точки Кода (для кода MATLAB) или Замене Оператора неподвижной точки Кода (для моделей Simulink®).

Во многих случаях числовой результат операции CBO равен той из операции CAO. Например, если типы ввода и вывода таковы, что операция приводит к идеальному результату, как в случае int8 + int8 —> int16. Чтобы максимизировать вероятность замены кода, происходящей в таких случаях, установите алгоритм на бросок после операции.

Ограничения

  • Генератор кода не заменяет операции на ненулевое сетевое смещение.

  • При классификации операции как операцию CAO генератор кода включает смежные броски в выражение, когда выражение включает только фиксированные точки. В противном случае генератор кода классифицирует и заменяет только мгновенное сложение или операцию вычитания. Броски, которые генератор кода исключает из классификации, появляются в сгенерированном коде.

  • Чтобы позволить генератору кода включать несколько операций броска, которые следуют за сложением или вычитанием данных фиксированной точки в классификации выражения, округляющимся режимом должен быть simplest или floor. Считайте выражение y=(cast A)(cast B)(u1+u2). Если округляющийся режим (cast A), (cast B) и оператора сложения (+) установлен в simplest или floor, генератор кода учитывает (cast A) и (cast B) при классификации выражения и выполнении замены только.

Похожие темы