Skip to content

JuliaBallArithmetic/BallArithmetic.jl

Repository files navigation

BallArithmetic

Stable Dev Build Status Coverage

This package implements Ball Arithmetic, with a focus on Numerical Linear Algebra.

Ball Arithmetic introduces a type, called Ball, which represents a subset of the real numbers of the type $(c-r, c+r)$ such that the computed sum of two balls X, Y is guaranteed to contain the set ${x+y \mid x\in X, y\in Y}$ of all the possible sums of elements of X and Y; this operation may return a bigger set, due to rounding, etc... Due to this inclusion property, we can use these computed entities to control the error of numercial operations and even prove theorems in Mathematics. Other packages implementing a similar phylosophy are IntervalArithmetic.jl, which implements Interval Arithmetic, and ArbNumerics which uses Ball Arithmetic and wraps Arb.

The library does not limit itself to the sum, but implements all the other arithmetic operations, but our main interest is to implement linear algebra operations following the ideas of Rump, BIT, 1999.

The fundamental idea is that, exchanging precision with speed, to use optimized Blas operations acting on matrices to compute enclosures of matrix-vector and matrix-matrix products. To do so, we introduce a type BallMatrix, which contains a matrix of centers and a matrix of radiuses. The implementation then guarantees that the result of a matrix-matrix product or a matrix vector product is contained in the set defined by the resulting BallMatrix or BallVector.