Flint2-0.1.0.5: Haskell bindings for the flint library for number theory
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Number.Flint.Support.D.Vec

Synopsis

Double precision vectors

Memory management

_d_vec_init :: CLong -> IO (Ptr CDouble) Source #

_d_vec_init len

Returns an initialised vector of doubles of given length. The entries are not zeroed.

_d_vec_clear :: Ptr CDouble -> IO () Source #

_d_vec_clear vec

Frees the space allocated for vec.

Randomisation

_d_vec_randtest :: Ptr CDouble -> Ptr CFRandState -> CLong -> CLong -> CLong -> IO () Source #

_d_vec_randtest f state len minexp maxexp

Sets the entries of a vector of the given length to random signed numbers with exponents between minexp and maxexp or zero.

Assignment and basic manipulation

_d_vec_set :: Ptr CDouble -> Ptr CDouble -> CLong -> IO () Source #

_d_vec_set vec1 vec2 len2

Makes a copy of (vec2, len2) into vec1.

_d_vec_zero :: Ptr CDouble -> CLong -> IO () Source #

_d_vec_zero vec len

Zeros the entries of (vec, len).

Comparison

_d_vec_equal :: Ptr CDouble -> Ptr CDouble -> CLong -> IO CInt Source #

_d_vec_equal vec1 vec2 len

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

_d_vec_is_zero :: Ptr CDouble -> CLong -> IO CInt Source #

_d_vec_is_zero vec len

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

_d_vec_is_approx_zero :: Ptr CDouble -> CLong -> CDouble -> IO CInt Source #

_d_vec_is_approx_zero vec len eps

Returns \(1\) if the entries of (vec, len) are zero to within eps, and \(0\) otherwise.

_d_vec_approx_equal :: Ptr CDouble -> Ptr CDouble -> CLong -> CDouble -> IO CInt Source #

_d_vec_approx_equal vec1 vec2 len eps

Compares two vectors of the given length and returns \(1\) if their entries are within eps of each other, otherwise returns \(0\).

Addition and subtraction

_d_vec_add :: Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CLong -> IO () Source #

_d_vec_add res vec1 vec2 len2

Sets (res, len2) to the sum of (vec1, len2) and (vec2, len2).

_d_vec_sub :: Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CLong -> IO () Source #

_d_vec_sub res vec1 vec2 len2

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

Dot product and norm

_d_vec_dot :: Ptr CDouble -> Ptr CDouble -> CLong -> IO CDouble Source #

_d_vec_dot vec1 vec2 len2

Returns the dot product of (vec1, len2) and (vec2, len2).

_d_vec_norm :: Ptr CDouble -> CLong -> IO CDouble Source #

_d_vec_norm vec len

Returns the square of the Euclidean norm of (vec, len).

_d_vec_dot_heuristic :: Ptr CDouble -> Ptr CDouble -> CLong -> Ptr CDouble -> IO CDouble Source #

_d_vec_dot_heuristic vec1 vec2 len2 err

Returns the dot product of (vec1, len2) and (vec2, len2) by adding up the positive and negative products, and doing a single subtraction of the two sums at the end. err is a pointer to a double in which an error bound for the operation will be stored.

_d_vec_dot_thrice :: Ptr CDouble -> Ptr CDouble -> CLong -> Ptr CDouble -> IO CDouble Source #

_d_vec_dot_thrice vec1 vec2 len2 err

Returns the dot product of (vec1, len2) and (vec2, len2) using error-free floating point sums and products to compute the dot product with three times (thrice) the working precision. err is a pointer to a double in which an error bound for the operation will be stored.

This implements the algorithm of Ogita-Rump-Oishi. See http://www.ti3.tuhh.de/paper/rump/OgRuOi05.pdf.