apytypes_mp.h

Functions

apy_limb_t apy_inplace_addition(apy_limb_t*, const std::size_t, const apy_limb_t*, const std::size_t)

Add two limb vectors in place: dest += src, where len(dest) >= len(src)

Add two limb vectors in place: dest += src, where len(dest) >= len(src)

static inline apy_limb_t apy_addition_same_length(apy_limb_t *dest, const apy_limb_t *src0, const apy_limb_t *src1, const std::size_t limbs)

Add two limb vectors: dest = src0 + src1, where len(dest) == len(src0) == len(src1)

static inline apy_limb_t apy_inplace_addition_single_limb(apy_limb_t *dest, const std::size_t limbs, const apy_limb_t src)

Add a single limb to a limb vector in place: dest += src.

static inline apy_limb_t apy_inplace_add_one_lsb(apy_limb_t *dest, const std::size_t limbs)

Add a single one to a limb vector in place: dest++.

static inline apy_limb_t apy_inplace_addition_same_length(apy_limb_t *dest, const apy_limb_t *src, const std::size_t limbs)

Add two limb vectors of the same length in place: dest += src, where len(dest) == len(src)

static inline apy_limb_t apy_inplace_negate(apy_limb_t *dest, const std::size_t limbs)

Negate a limb vector in place: dest = -dest.

static inline apy_limb_t apy_negate(apy_limb_t *dest, const apy_limb_t *src, const std::size_t limbs)

Negate a limb vector: dest = -src.

static inline apy_limb_t apy_inplace_subtraction_single_limb(apy_limb_t *dest, const std::size_t limbs, const apy_limb_t src)

Subtract a single limb from a limb vectors in place: dest -= src.

static inline apy_limb_t apy_inplace_subtraction_same_length(apy_limb_t *dest, const apy_limb_t *src, const std::size_t limbs)

Subtract two limb vectors in place: dest -= src, where len(dest) == len(src)

static inline apy_limb_t apy_inplace_reversed_subtraction_same_length(apy_limb_t *dest, const apy_limb_t *src, const std::size_t limbs)

Subtract two limb vectors in place: dest = src - dest, where len(dest) == len(src)

static inline apy_limb_t apy_subtraction_same_length(apy_limb_t *dest, const apy_limb_t *src0, const apy_limb_t *src1, const std::size_t limbs)

Subtract two limb vectors: dest = src0 - src1, where len(dest) == len(src0) == len(src1)

apy_limb_t apy_inplace_left_shift(apy_limb_t*, const std::size_t, unsigned int)

Left-shift limb vector in place.

apy_limb_t apy_left_shift(apy_limb_t *dest, const apy_limb_t *src, const std::size_t limbs, const unsigned shift_amount)

Left-shift limb vector: dest == src << shift_amount.

apy_limb_t apy_inplace_right_shift(apy_limb_t*, const std::size_t, unsigned int)

Right-shift limb vector in place.

apy_limb_t apy_unsigned_multiplication(apy_limb_t*, const apy_limb_t*, const std::size_t, const apy_limb_t*, const std::size_t)

Multiply two unsigned limb vectors.

apy_limb_t apy_unsigned_square(apy_limb_t*, const apy_limb_t*, const std::size_t)

Square an unsigned limb vector.

void apy_unsigned_division(apy_limb_t*, apy_limb_t*, const std::size_t, const apy_limb_t*, const std::size_t)

Divide two unsigned limb vectors.

void apy_unsigned_division_preinverted(apy_limb_t *quotient, apy_limb_t *numerator, const std::size_t numerator_limbs, const apy_limb_t *denominator, const std::size_t denominator_limbs, const APyDivInverse *inv)

Divide two unsigned limb vectors where the APyDivInverse is pre-computed.

class APyDivInverse
#include <apytypes_mp.h>

Class representing the inverse/reciprocal of the denominator.

Public Functions

explicit APyDivInverse(const apy_limb_t*, std::size_t)

Constructor from limb vector.

Public Members

unsigned norm_shift

Normalization shift count.

apy_limb_t norm_denominator_1

Normalized denominator, most significant limb.

apy_limb_t norm_denominator_0

Normalized denominator, least significant limb (unused for single limb denominators)

apy_limb_t inverse

Inverse, for 2/1 or 3/2.

Private Functions

void compute_3by2_inverse()

Compute the 3/2 (or 2/1) inverse.