# \[ANN\] MultiPrecisionArrays.jl: Algorithms and data structures for iterative refinement

**URL:** https://discourse.julialang.org/t/ann-multiprecisionarrays-jl-algorithms-and-data-structures-for-iterative-refinement/111993
**Category:** Package Announcements
**Tags:** linearalgebra, numerics
**Created:** [March 22, 2024, 8:35pm UTC](https://discourse.julialang.org/t/ann-multiprecisionarrays-jl-algorithms-and-data-structures-for-iterative-refinement/111993 "2024-03-22T20:35:35Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![ctkelley](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ctkelley/32/10684_2.png) [@ctkelley](https://discourse.julialang.org/u/ctkelley)
#### Post date: [March 22, 2024, 8:35pm UTC](https://discourse.julialang.org/t/ann-multiprecisionarrays-jl-algorithms-and-data-structures-for-iterative-refinement/111993/1 "2024-03-22T20:35:35Z")

</div>

I just tagged v0.1.0 of [MultiPrecisionArrays.jl](https://github.com/ctkelley/MultiPrecisionArrays.jl).

This package provides data structures and solvers for several variants of iterative refinement (IR) for solving linear systems A x= b.  
IR reduces matrix factorization costs by factoring a copy of A in a low precision and then using that copy in a residual correction iteration.

Hence, IR is time-for-storage tradeoff. The factorization cost is reduced but you must store a low precision copy of A. **MultiPrecisionArrays.jl** manages that for you. To solve the system you do

```julia
AF = mplu(A)
x = AF\b

```

The multiprecision factorization `mplu` makes the low precision copy,  
factors it, and preallocates the data the residual correction iteration needs. The solver performs the iteration and I’ve overloaded `\` to do that.

The package supports Krylov-IR methods as well as the classic IR iteration.

The README file and the docs on the repo explain how it all works.
