Этот пример показывает, как блок Sum переупорядочивает входы. Если вы используете -
знак в качестве первой операции, блок переупорядочивает входы, по возможности, чтобы использовать +
операция. Для примера в выражении output = -a-b+c
блок Sum переупорядочивает вход так, чтобы output = c-a-b
. Чтобы инициализировать аккумулятор, блок Sum использует первую +
входной порт.
Блок избегает выполнения унарной операции минус на первом операнде a
потому что это может изменить значение a
для типов данных с фиксированной точкой. В этом случае значение выхода отличается от результата накопления значений для a
, b
, и c
.
Оба постоянных входов используют int8
типы данных Блок Sum также использует int8
для типов данных аккумулятора и выхода и имеет Saturate при целочисленном переполнении, включенном. Блок Sum переупорядочивает входы, чтобы дать идеальный результат 127
.
Переупорядочивает входы от (-Input1 + Input2)
на (Input2 - Input1)
.
Инициализирует аккумулятор при помощи первого +
входной порт. Accumulator = int8(-1) = -1
Продолжает накапливать значения. Accumulator = Accumulator - int8(-128) = 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 в библиотеке Математические операции.