THIS SECTION IS UNDER CONSTRUCTION
В отличии от обычного сложения/вычитания в дополнительном коде, когда и signed и unsigned варианты могут делаться одной командой, для saturated арифметики - это совершенно разные команды.
Add Saturated Unsigned
Subtract Saturated Unsigned
Add Saturated Signed
Пример кода на C для 16 бит:
// Saturated Add, sizeof(int) = 2 int sadd(int a, int b) { int result; result = a + b; if (((a^b) & 0x8000) == 0) { // same sign if ((result^a) & 0x8000) { // result have different sign, that operand result = (a > 0)? 0x8000: 0x7fff; } } return result; } |