Этот пример показывает, как блок Sum переупорядочивает входные параметры. Если вы используете знак -
в качестве первой операции, блок переупорядочивает входные параметры, если это возможно, чтобы использовать операцию +
. Например, в выражении output = -a-b+c
, блок Sum переупорядочивает вход так, чтобы output = c-a-b
. Чтобы инициализировать аккумулятор, блок Sum использует первый входной порт +
.
Блок старается не выполнять унарное минус операция на первом операнде a
, потому что выполнение так может изменить значение a
для типов данных с фиксированной точкой. В этом случае выходное значение отличается от результата накопления значений для a
, b
и c
.
Оба постоянные входные параметры используют типы данных int8
блок Sum также, используют int8
для аккумулятора и типов выходных данных и имеют, Насыщают на включенном целочисленном переполнении. Блок Sum переупорядочивает входные параметры, чтобы дать идеальный результат 127
.
Переупорядочивание вводит от (-Input1 + Input2)
до (Input2 - Input1)
.
Инициализирует аккумулятор при помощи первого входного порта +
. Accumulator = int8(-1) = -1
Продолжает накапливать значения. Accumulator = Accumulator - int8(-12) = 127
Вычисляет блок вывод. Output = int8(127) = 127
Если блок Sum не переупорядочивает входные параметры, то вы получаете неидеальный результат 126
.
Инициализирует аккумулятор при помощи первого входного порта. Accumulator = int8(-(-128)) = 127
Поскольку насыщение включено, начальное значение аккумулятора насыщает в 127
и не переносится.
Продолжает накапливать значения. Accumulator = Accumulator + int8(-1) = 126
Вычисляет блок вывод. Output = int8(126) = 126
Чтобы явным образом задать унарное минус операция для output = -a-b+c
, можно использовать блок Unary Minus в библиотеке Math Operations.