static inline uint32_t saturated_addu32(uint32_t x, uint32_t y)
{
uint32_t sum = x + y;
sum |= -(sum < x);
return sum;
}
非負整數相加,結果變小時 OR -1,否則 OR 0,不用判斷式。
static inline uint32_t saturated_subu32(uint32_t x, uint32_t y)
{
uint32_t z = x - y;
z &= -(z <= x);
return z;
}
非負整數相減,結果變大時 AND 0 成為 0,否則 AND -1 不變,不用判斷式。
https://en.wikipedia.org/wiki/Saturation_arithmetic
沒有留言:
張貼留言