mpf_vec.h – vectors of MPF floating-point numbers

Memory management

mpf * _mpf_vec_init(slong len)

Returns a vector of the given length of initialised mpf’s with at least the given precision.

void _mpf_vec_clear(mpf * vec, slong len)

Clears the given vector.

Randomisation

void _mpf_vec_randtest(mpf * f, flint_rand_t state, slong len, mp_bitcnt_t bits)

Sets the entries of a vector of the given length to random numbers in the interval \([0, 1)\) with bits significant bits in the mantissa or less if their precision is smaller.

Assignment and basic manipulation

void _mpf_vec_zero(mpf * vec, slong len)

Zeros the vector (vec, len).

void _mpf_vec_set(mpf * vec1, const mpf * vec2, slong len2)

Copies the vector vec2 of the given length into vec1. A check is made to ensure vec1 and vec2 are different.

Comparison

int _mpf_vec_equal(const mpf * vec1, const mpf * vec2, slong len)

Compares two vectors of the given length and returns \(1\) if they are equal, otherwise returns \(0\).

int _mpf_vec_is_zero(const mpf * vec, slong len)

Returns \(1\) if (vec, len) is zero, and \(0\) otherwise.

int _mpf_vec_approx_equal(const mpf * vec1, const mpf * vec2, slong len, mp_bitcnt_t bits)

Compares two vectors of the given length and returns \(1\) if the first bits bits of their entries are equal, otherwise returns \(0\).

Addition and subtraction

void _mpf_vec_add(mpf * res, const mpf * vec1, const mpf * vec2, slong len2)

Adds the given vectors of the given length together and stores the result in res.

void _mpf_vec_sub(mpf * res, const mpf * vec1, const mpf * vec2, slong len2)

Sets (res, len2) to (vec1, len2) minus (vec2, len2).

Scalar multiplication

void _mpf_vec_scalar_mul_mpf(mpf * res, const mpf * vec, slong len, mpf_t c)

Multiplies the vector with given length by the scalar \(c\) and sets res to the result.

void _mpf_vec_scalar_mul_2exp(mpf * res, const mpf * vec, slong len, mp_bitcnt_t exp)

Multiplies the given vector of the given length by 2^exp.

Dot product and norm

void _mpf_vec_dot(mpf_t res, const mpf * vec1, const mpf * vec2, slong len2)

Sets res to the dot product of (vec1, len2) with (vec2, len2).

void _mpf_vec_norm(mpf_t res, mpf * vec, slong len)

Sets res to the sqaure of the Euclidean norm of (vec, len).

int _mpf_vec_dot2(mpf_t res, const mpf * vec1, const mpf * vec2, slong len2, mp_bitcnt_t prec)

Sets res to the dot product of (vec1, len2) with (vec2, len2). The temporary variable used has its precision set to be at least prec bits. Returns 0 if a probable cancellation is detected, and otherwise returns a non-zero value.

void _mpf_vec_norm2(mpf_t res, mpf * vec, slong len, mp_bitcnt_t prec)

Sets res to the sqaure of the Euclidean norm of (vec, len). The temporary variable used has its precision set to be at least prec bits.