Arithmetic operators

template<class T, class A>
auto xsimd::add(batch<T> const &x, batch<T, A> const &y)

Computes the sum of the batches x and y.

Return
the sum of x and y
Parameters
  • x: batch or scalar involved in the addition.
  • y: batch or scalar involved in the addition.

template<class T, class A>
auto xsimd::div(batch<T, A> const &x, batch<T, A> const &y)

Computes the division of the batch x by the batch y.

Return
the result of the division.
Parameters
  • x: scalar or batch of scalars
  • y: scalar or batch of scalars

template<class T, class A>
batch<T, A> xsimd::fma(batch<T, A> const &x, batch<T, A> const &y, batch<T, A> const &z)

Computes (x*y) + z in a single instruction when possible.

Return
the result of the fused multiply-add operation.
Parameters
  • x: a batch of integer or floating point values.
  • y: a batch of integer or floating point values.
  • z: a batch of integer or floating point values.

template<class T, class A>
batch<T, A> xsimd::fms(batch<T, A> const &x, batch<T, A> const &y, batch<T, A> const &z)

Computes (x*y) - z in a single instruction when possible.

Return
the result of the fused multiply-sub operation.
Parameters
  • x: a batch of integer or floating point values.
  • y: a batch of integer or floating point values.
  • z: a batch of integer or floating point values.

template<class T, class A>
batch<T, A> xsimd::fnma(batch<T, A> const &x, batch<T, A> const &y, batch<T, A> const &z)

Computes -(x*y) + z in a single instruction when possible.

Return
the result of the fused negated multiply-add operation.
Parameters
  • x: a batch of integer or floating point values.
  • y: a batch of integer or floating point values.
  • z: a batch of integer or floating point values.

template<class T, class A>
batch<T, A> xsimd::fnms(batch<T, A> const &x, batch<T, A> const &y, batch<T, A> const &z)

Computes -(x*y) - z in a single instruction when possible.

Return
the result of the fused negated multiply-sub operation.
Parameters
  • x: a batch of integer or floating point values.
  • y: a batch of integer or floating point values.
  • z: a batch of integer or floating point values.

template<class T, class A>
auto xsimd::mod(batch<T, A> const &x, batch<T, A> const &y)

Computes the integer modulo of the batch x by the batch y.

Return
the result of the modulo.
Parameters
  • x: batch involved in the modulo.
  • y: batch involved in the modulo.

template<class T, class A>
auto xsimd::mul(batch<T, A> const &x, batch<T, A> const &y)

Computes the product of the batches x and y.

Return
the result of the product.
Template Parameters
  • X: the actual type of batch.
Parameters
  • x: batch involved in the product.
  • y: batch involved in the product.

template<class T, class A>
batch<T, A> xsimd::neg(batch<T, A> const &x)

Computes the opposite of the batch x.

Return
the opposite of x.
Parameters
  • x: batch involved in the operation.

template<class T, class A>
batch<T, A> xsimd::pos(batch<T, A> const &x)

No-op on x.

Return
x.
Parameters
  • x: batch involved in the operation.

template<class T, class A, class = typename std::enable_if<std::is_floating_point<T>::value, void>::type>
batch<T, A> xsimd::reciprocal(batch<T, A> const &x)

Computes the approximate reciprocal of the batch x.

The maximum relative error for this approximation is less than 1.5*2^-12.

Return
the reciprocal.
Parameters
  • x: batch of floating point numbers.

template<class T, class A>
batch<T, A> xsimd::sadd(batch<T, A> const &x, batch<T, A> const &y)

Computes the saturate sum of the batch x and the batch y.

Return
the result of the saturated addition.
Template Parameters
  • X: the actual type of batch.
Parameters
  • x: batch involved in the saturated addition.
  • y: batch involved in the saturated addition.

template<class T, class A>
batch<T, A> xsimd::ssub(batch<T, A> const &x, batch<T, A> const &y)

Computes the saturate difference of the batch x and the batch y.

Return
the result of the saturated difference.
Template Parameters
  • X: the actual type of batch.
Parameters
  • x: batch involved in the saturated difference.
  • y: batch involved in the saturated difference.

template<class T, class A>
auto xsimd::sub(batch<T, A> const &x, batch<T, A> const &y)

Computes the difference between x and y.

Return
the difference between x and y
Template Parameters
  • X: the actual type of batch.
Parameters
  • x: scalar or batch of scalars
  • y: scalar or batch of scalars