simdpp::avg

From libsimdpp-docs
< int
template<unsigned N, class E1, class E2>
Ret<N, _DETAIL_> avg( Vec1<N,E1> a, Vec2<N,E2> b );

Computes correctly rounded average of values in two integer values. The implementation behaves as if the following set of overloads is provided:

Ret Vec1 Vec2
int8 int8 int8
uint8 uint8 uint8
int16 int16 int16
uint16 uint16 uint16
int32 int32 int32
uint32 uint32 uint32

The return type is a vector expression.

Scalar arguments[edit]

Several additional overloads are provided to implement implicit conversions from scalar types. Values of the following types are accepted as the first or the second argument: int32_t, int64_t, uint32_t, uint64_t. Each element of the expanded vector contains bitwise representation of the source value, with the highest bits discarded if the source data is too large.

The return type is a vector expression. The vector type is the same as the vector argument except that masks are unmasked to respective non-mask vector types.

Parameters[edit]

a, b - integer vectors

Return value[edit]

A vector expression evaluating to (a + b + 1) / 2.

Equivalent operation[edit]

r0 = (a0 + b0 + 1) / 2
...
rN = (aN + bN + 1) / 2

See also[edit]