Рассмотрите следующее при определении отображений для замен оператора сложения и оператора вычитания кода.
При создании заменяющей записи таблицы кода для оператора сложения или оператора вычитания, сначала определите тип алгоритма, который реализует библиотечная функция.
Бросок перед операцией (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 типа данных | Тип данных аккумулятора | Тип выходных данных | Классификация |
---|---|---|---|---|
double | double | double | double | CBO, ГЛАВНЫЙ АДМИНИСТРАТОР |
double | double | double | single | — |
double | double | single | double | — |
double | double | single | single | CBO |
double | single | double | double | CBO, ГЛАВНЫЙ АДМИНИСТРАТОР |
double | single | double | single | — |
double | single | single | double | — |
double | single | single | single | CBO |
single | single | single | single | CBO, ГЛАВНЫЙ АДМИНИСТРАТОР |
single | single | single | double | — |
single | single | double | single | — |
single | single | double | double | CBO, ГЛАВНЫЙ АДМИНИСТРАТОР |
С плавающей точкой и фиксированные точки на мгновенном сложении или операции вычитания
Алгоритм | Условия |
---|---|
CBO |
Одно из следующего верно:
|
Главный администратор | Тип операции является надмножеством входных типов — то есть, выходной тип может представлять значения входных типов без потери данных. |
Фиксированные точки только
Алгоритм | Условия |
---|---|
CBO |
По крайней мере одно из следующего верно:
|
Главный администратор | Сетевое смещение является нулем, и типы данных в выражении имеют равные наклонные поправочные коэффициенты. Для получения дополнительной информации о сетевом смещении см. “Сложение” или “Вычитание” в Замене Оператора неподвижной точки Кода (для кода 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)
при классификации выражения и выполнении замены только.