C C++ Other
Clone or download
Permalink
Failed to load latest commit information.
acb move mag_add_ui_lower; small cleanup Apr 10, 2018
acb_calc utility functions acb_sqrt_analytic, acb_rsqrt_analytic, acb_log_anal… Feb 22, 2018
acb_dft avoid calling nmod_init with modulus 0 (division by zero) in DFT prec… Mar 3, 2018
acb_dirichlet stieltjes constants: small bugfix Apr 20, 2018
acb_elliptic reduce z' mod tau' in theta functions to support larger arguments wit… Aug 25, 2017
acb_hypgeom legendre_p: handle inexact integer a+b-c in 2F1 better (patch by Joel… Jul 6, 2018
acb_mat acb_mat_det_precond and other determinant improvements Jul 3, 2018
acb_modular fix the constant in a comment Jun 24, 2018
acb_poly add acb_dirichlet_zeta_jet + first derivative using Riemann-Siegel; a… Nov 20, 2017
arb add mag_sinh/cosh/sinh_lower/cosh_lower; improve arb_cosh/sinh/sinh_c… Jul 11, 2018
arb_calc Replace abort with flint_abort. Feb 28, 2017
arb_fmpz_poly Simplify real case. Jan 18, 2018
arb_hypgeom implement scaled modified Bessel functions Mar 23, 2018
arb_mat some more acb_mat functions: ones, dft, conjugate, conjugate_transpose Jul 3, 2018
arb_poly add arb_poly_product_roots_complex; add test code and slight optimiza… Jun 21, 2017
arf mpfr 4.0 deprecated mpfr_root Feb 10, 2018
bernoulli Replace abort with flint_abort. Feb 28, 2017
bool_mat Replace abort with flint_abort. Feb 28, 2017
dirichlet update dirichlet profile code Oct 4, 2017
dlog silence compiler warnings caused by flint_abort Jun 18, 2017
doc add mag_sinh/cosh/sinh_lower/cosh_lower; improve arb_cosh/sinh/sinh_c… Jul 11, 2018
examples add some arb_mat special matrices: ones, hilbert, dct Jun 24, 2018
fmpr mpfr 4.0 deprecated mpfr_root Feb 10, 2018
fmpz_extras Replace abort with flint_abort. Feb 28, 2017
hypgeom Replace abort with flint_abort. Feb 28, 2017
mag add mag_sinh/cosh/sinh_lower/cosh_lower; improve arb_cosh/sinh/sinh_c… Jul 11, 2018
partitions Replace abort with flint_abort. Feb 28, 2017
.build_dependencies fix .build_dependencies to test flint 2.5 instead of flint trunk Jul 10, 2017
.gitignore Add libarb.a to .gitignore Aug 12, 2016
.travis.yml Update .travis.yml Feb 10, 2018
CMakeLists.txt target_compile_definitions require CMake >=2.8.12 Nov 7, 2016
LICENSE replace gpl-2.0.txt with LICENSE = lgpl-2.1.txt Apr 26, 2016
Makefile.in merge and update some acb_dirichlet code Sep 18, 2017
Makefile.subdirs tentatively include -Wl Makefile.subdirs fix Jan 30, 2018
README.md Update README.md Dec 14, 2017
acb.h utility functions acb_sqrt_analytic, acb_rsqrt_analytic, acb_log_anal… Feb 22, 2018
acb_calc.h minor improvements to integration code; change interface; more examples Nov 21, 2017
acb_dft.h precomp 1/3 in bluestein Oct 30, 2017
acb_dirichlet.h code for computing isolated Stieltjes constants Apr 3, 2018
acb_elliptic.h implement inverse Weierstrass elliptic function and lattice invariants Feb 14, 2017
acb_hypgeom.h implement scaled modified Bessel functions Mar 23, 2018
acb_mat.h acb_mat_det_precond and other determinant improvements Jul 3, 2018
acb_modular.h add theta_jet functions with tau transformation, and use in elliptic … Feb 16, 2017
acb_poly.h Lambert W function of power series Mar 20, 2017
arb.h add arb_log_hypot and improve acb_log for wide intervals Feb 21, 2018
arb_calc.h update copyright headers to switch from GPL to LGPL Apr 26, 2016
arb_fmpz_poly.h missing C++ include guards Feb 9, 2018
arb_hypgeom.h implement scaled modified Bessel functions Mar 23, 2018
arb_mat.h make sure matrix squaring uses the fast multiplication code Jul 3, 2018
arb_poly.h add arb_poly_product_roots_complex; add test code and slight optimiza… Jun 21, 2017
arf.h Change flint_abort to abort only if flint > 2.5.2 Mar 2, 2017
bernoulli.h update copyright headers to switch from GPL to LGPL Apr 26, 2016
bool_mat.h Change flint_abort to abort only if flint > 2.5.2 Mar 2, 2017
configure fix rpath Mar 11, 2018
dirichlet.h use acb_dirichlet_roots_t in l_hurwitz and l_jet; rename dirichlet_nu… Dec 1, 2016
dlog.h missing C++ include guards Feb 9, 2018
fmpr.h Change flint_abort to abort only if flint > 2.5.2 Mar 2, 2017
fmpz_extras.h slight speedup of Legendre polynomials Oct 18, 2017
hypgeom.h update copyright headers to switch from GPL to LGPL Apr 26, 2016
mag.h add mag_sinh/cosh/sinh_lower/cosh_lower; improve arb_cosh/sinh/sinh_c… Jul 11, 2018
partitions.h update copyright headers to switch from GPL to LGPL Apr 26, 2016

README.md

Arb

Arb is a C library for arbitrary-precision interval arithmetic. It has full support for both real and complex numbers. The library is thread-safe, portable, and extensively tested. Arb is free software distributed under the GNU Lesser General Public License (LGPL), version 2.1 or later.

arb logo

Documentation: http://arblib.org

Development updates: http://fredrikj.net/blog/

Author: Fredrik Johansson fredrik.johansson@gmail.com

Bug reports, feature requests and other comments are welcome in private communication, on the GitHub issue tracker, or on the FLINT mailing list flint-devel@googlegroups.com.

Build Status

Code example

The following program evaluates sin(pi + exp(-10000)). Since the input to the sine function matches a root to within 4343 digits, at least 4343-digit (14427-bit) precision is needed to get an accurate result. The program repeats the evaluation at 64-bit, 128-bit, ... precision, stopping only when the result is accurate to at least 53 bits.

#include "arb.h"

int main()
{
    slong prec;
    arb_t x, y;
    arb_init(x); arb_init(y);

    for (prec = 64; ; prec *= 2)
    {
        arb_const_pi(x, prec);
        arb_set_si(y, -10000);
        arb_exp(y, y, prec);
        arb_add(x, x, y, prec);
        arb_sin(y, x, prec);
        arb_printn(y, 15, 0); printf("\n");
        if (arb_rel_accuracy_bits(y) >= 53)
            break;
    }

    arb_clear(x); arb_clear(y);
    flint_cleanup();
}

The output is:

[+/- 6.01e-19]
[+/- 2.55e-38]
[+/- 8.01e-77]
[+/- 8.64e-154]
[+/- 5.37e-308]
[+/- 3.63e-616]
[+/- 1.07e-1232]
[+/- 9.27e-2466]
[-1.13548386531474e-4343 +/- 3.91e-4358]

Each line shows a rigorous enclosure of the exact value of the expression. The program demonstrates how the user can rely on Arb's automatic error bound tracking to get an output that is guaranteed to be accurate -- no error analysis needs to be done by the user.

For more example programs, see: http://arblib.org/examples.html

General features

Besides basic arithmetic, Arb allows working with univariate polynomials, truncated power series, and matrices over both real and complex numbers.

Basic linear algebra is supported, including matrix multiplication, determinant, inverse, nonsingular solving and matrix exponential.

Support for polynomial and power series is quite extensive, including methods for composition, reversion, product trees, multipoint evaluation and interpolation, complex root isolation, and transcendental functions of power series.

Other features include root isolation for real functions, rigorous numerical integration of complex functions, and discrete Fourier transforms (DFTs).

Special functions

Arb can compute a wide range of transcendental and special functions, including the gamma function, polygamma functions, Riemann zeta and Hurwitz zeta function, Dirichlet L-functions, polylogarithm, error function, Gauss hypergeometric function 2F1, confluent hypergeometric functions, Bessel functions, Airy functions, Legendre functions and other orthogonal polynomials, exponential and trigonometric integrals, incomplete gamma and beta functions, Jacobi theta functions, modular functions, Weierstrass elliptic functions, complete and incomplete elliptic integrals, arithmetic-geometric mean, Bernoulli numbers, partition function, Barnes G-function, Lambert W function.

Speed

Arb uses a midpoint-radius (ball) representation of real numbers. At high precision, this allows doing interval arithmetic without significant overhead compared to plain floating-point arithmetic. Various low-level optimizations have also been implemented to reduce overhead at precisions of just a few machine words. Most operations on polynomials and power series use asymptotically fast FFT multiplication.

For basic arithmetic, Arb should generally be around as fast as MPFR (http://mpfr.org), though it can be a bit slower at low precision, and around twice as fast as MPFI (https://perso.ens-lyon.fr/nathalie.revol/software.html).

Transcendental functions in Arb are quite well optimized and should generally be faster than any other arbitrary-precision software currently available. The following table compares the time in seconds to evaluate the Gauss hypergeometric function 2F1(1/2, 1/4, 1, z) at the complex number z = 5^(1/2) + 7^(1/2)i, to a given number of decimal digits (Arb 2.8-git and mpmath 0.19 on an 1.90 GHz Intel i5-4300U, Mathematica 9.0 on a 3.07 GHz Intel Xeon X5675).

Digits Mathematica mpmath Arb
10 0.00066 0.00065 0.000071
100 0.0039 0.0012 0.00048
1000 0.23 1.2 0.0093
10000 42.6 84 0.56

Dependencies, installation, and interfaces

Arb depends on FLINT (http://flintlib.org/), either GMP (http://gmplib.org) or MPIR (http://mpir.org), and MPFR (http://mpfr.org).

See http://arblib.org/setup.html for instructions on building and installing Arb directly from the source code. Arb might also be available (or coming soon) as a package for your Linux distribution.

SageMath (http://sagemath.org/) includes Arb as a standard package and contains a high-level Python interface. See the SageMath documentation for RealBallField (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) and ComplexBallField (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).

Nemo (http://nemocas.org/) is a computer algebra package for the Julia programming language which includes a high-level Julia interface to Arb. The Nemo installation script will create a local installation of Arb along with other dependencies.

An experimental standalone Python interface to FLINT and Arb is also available (https://github.com/fredrik-johansson/python-flint).

A separate wrapper of transcendental functions for use with the C99 complex double type is available (https://github.com/fredrik-johansson/arbcmath).

Other third-party wrappers include: