No description
Find a file
2018-06-26 21:42:55 +02:00
acb move mag_add_ui_lower; small cleanup 2018-04-10 17:49:06 +02:00
acb_calc utility functions acb_sqrt_analytic, acb_rsqrt_analytic, acb_log_analytic, acb_pow_analytic, acb_real_sqrtpos; also improve bounds in acb_rsqrt 2018-02-23 00:21:01 +01:00
acb_dft avoid calling nmod_init with modulus 0 (division by zero) in DFT precomp functions 2018-03-03 11:21:55 +01:00
acb_dirichlet stieltjes constants: small bugfix 2018-04-20 20:49:53 +02:00
acb_elliptic reduce z' mod tau' in theta functions to support larger arguments with reasonable performance 2017-08-25 15:40:57 +02:00
acb_hypgeom Airy functions: fix precision loss for huge input and high precision 2018-05-01 11:02:49 +02:00
acb_mat port precond solving to acb_mat 2018-04-10 17:52:06 +02:00
acb_modular fix the constant in a comment 2018-06-24 14:40:28 +02:00
acb_poly add acb_dirichlet_zeta_jet + first derivative using Riemann-Siegel; also fix a bug in Riemann-Siegel code 2017-11-20 19:14:20 +01:00
arb 2.14.0-git version string 2018-04-08 22:31:14 +02:00
arb_calc Replace abort with flint_abort. 2017-02-28 16:52:57 +01:00
arb_fmpz_poly Simplify real case. 2018-01-18 16:56:06 +01:00
arb_hypgeom implement scaled modified Bessel functions 2018-03-23 13:41:46 +01:00
arb_mat arb_mat: window matrices, block recursive LU factorization and triangular solving 2018-06-26 21:42:55 +02:00
arb_poly add arb_poly_product_roots_complex; add test code and slight optimization for arb/acb_poly_product_roots 2017-06-21 15:07:40 +02:00
arf mpfr 4.0 deprecated mpfr_root 2018-02-11 00:41:38 +01:00
bernoulli Replace abort with flint_abort. 2017-02-28 16:52:57 +01:00
bool_mat Replace abort with flint_abort. 2017-02-28 16:52:57 +01:00
dirichlet update dirichlet profile code 2017-10-04 21:25:30 +02:00
dlog silence compiler warnings caused by flint_abort 2017-06-18 17:06:17 +02:00
doc arb_mat: window matrices, block recursive LU factorization and triangular solving 2018-06-26 21:42:55 +02:00
examples add some arb_mat special matrices: ones, hilbert, dct 2018-06-24 16:21:44 +02:00
fmpr mpfr 4.0 deprecated mpfr_root 2018-02-11 00:41:38 +01:00
fmpz_extras Replace abort with flint_abort. 2017-02-28 16:52:57 +01:00
hypgeom Replace abort with flint_abort. 2017-02-28 16:52:57 +01:00
mag move mag_add_ui_lower; small cleanup 2018-04-10 17:49:06 +02:00
partitions Replace abort with flint_abort. 2017-02-28 16:52:57 +01:00
.build_dependencies fix .build_dependencies to test flint 2.5 instead of flint trunk 2017-07-10 17:43:56 +02:00
.gitignore Add libarb.a to .gitignore 2016-08-12 00:11:48 -04:00
.travis.yml Update .travis.yml 2018-02-10 16:33:46 -06:00
acb.h utility functions acb_sqrt_analytic, acb_rsqrt_analytic, acb_log_analytic, acb_pow_analytic, acb_real_sqrtpos; also improve bounds in acb_rsqrt 2018-02-23 00:21:01 +01:00
acb_calc.h minor improvements to integration code; change interface; more examples 2017-11-22 00:24:20 +01:00
acb_dft.h precomp 1/3 in bluestein 2017-10-30 08:43:01 +01:00
acb_dirichlet.h code for computing isolated Stieltjes constants 2018-04-04 00:58:04 +02:00
acb_elliptic.h implement inverse Weierstrass elliptic function and lattice invariants 2017-02-14 07:37:32 +01:00
acb_hypgeom.h implement scaled modified Bessel functions 2018-03-23 13:41:46 +01:00
acb_mat.h port precond solving to acb_mat 2018-04-10 17:52:06 +02:00
acb_modular.h add theta_jet functions with tau transformation, and use in elliptic functions 2017-02-16 13:48:30 +01:00
acb_poly.h Lambert W function of power series 2017-03-20 22:56:37 +01:00
arb.h add arb_log_hypot and improve acb_log for wide intervals 2018-02-21 19:03:26 +01:00
arb_calc.h update copyright headers to switch from GPL to LGPL 2016-04-26 17:20:05 +02:00
arb_fmpz_poly.h missing C++ include guards 2018-02-09 21:52:34 +01:00
arb_hypgeom.h implement scaled modified Bessel functions 2018-03-23 13:41:46 +01:00
arb_mat.h arb_mat: window matrices, block recursive LU factorization and triangular solving 2018-06-26 21:42:55 +02:00
arb_poly.h add arb_poly_product_roots_complex; add test code and slight optimization for arb/acb_poly_product_roots 2017-06-21 15:07:40 +02:00
arf.h Change flint_abort to abort only if flint > 2.5.2 2017-03-02 17:18:18 +01:00
bernoulli.h update copyright headers to switch from GPL to LGPL 2016-04-26 17:20:05 +02:00
bool_mat.h Change flint_abort to abort only if flint > 2.5.2 2017-03-02 17:18:18 +01:00
CMakeLists.txt target_compile_definitions require CMake >=2.8.12 2016-11-07 16:26:54 +05:30
configure fix rpath 2018-03-11 22:33:25 +01:00
dirichlet.h use acb_dirichlet_roots_t in l_hurwitz and l_jet; rename dirichlet_number_primitive -> dirichlet_group_num_primitive 2016-12-01 22:33:15 +01:00
dlog.h missing C++ include guards 2018-02-09 21:52:34 +01:00
fmpr.h Change flint_abort to abort only if flint > 2.5.2 2017-03-02 17:18:18 +01:00
fmpz_extras.h slight speedup of Legendre polynomials 2017-10-18 15:17:52 +02:00
hypgeom.h update copyright headers to switch from GPL to LGPL 2016-04-26 17:20:05 +02:00
LICENSE replace gpl-2.0.txt with LICENSE = lgpl-2.1.txt 2016-04-26 17:24:23 +02:00
mag.h move mag_add_ui_lower; small cleanup 2018-04-10 17:49:06 +02:00
Makefile.in merge and update some acb_dirichlet code 2017-09-18 18:20:47 +02:00
Makefile.subdirs tentatively include -Wl Makefile.subdirs fix 2018-01-30 15:57:32 +01:00
partitions.h update copyright headers to switch from GPL to LGPL 2016-04-26 17:20:05 +02:00
README.md Update README.md 2017-12-14 13:35:40 +01:00

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: