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;
}
|