fredrikj.net / blog /

# Arb 2.5.0 released

*January 28, 2015*

I've tagged version 2.5.0 of Arb. As usual, the documentation is available. Highlights of this release include:

- Proper
**arb-to-string**conversion code, producing a rigorous decimal representation, as well as code for the reverse string-to-arb conversion. I first implemented this in Python for Python-FLINT (see that blog post for example output), but it's now all ported to C. I've also added many other small helper functions and fixed small problems that turned up when working on Python-FLINT. The library should be easier to wrap now. Expect an official version of Python-FLINT in a few days. - Lots of
**new special functions**, including the incomplete gamma function (requested by at least three different people), the complex arithmetic-geometric mean (with correct branch cuts), the complete elliptic integral of the first kind, the complementary error function, and versions of elementary functions such as log1p and atanh. Several special functions of power series were also added. - More
**optimizations**, such as the faster high-precision arctangents and improvements to division.

I also added a logo:

The Riemann zeta function, of course, is iconic in itself, and a major feature of the library. The crosshair illustrates the ability to pin down a number precisely (and, if you will, actually encircle it!).

Here is a more changelog with more details:

- string conversion
- added arb_set_str
- added arb_get_str and arb_printn for pretty-printed rigorous decimal output
- added helper functions for binary to decimal conversion

- core arithmetic
- improved speed of division when using GMP instead of MPIR
- improved complex division with a small denominator
- removed a little bit of overhead for complex squaring

- special functions
- faster code for atan at very high precision, used instead of mpfr_atan
- optimized elementary functions slightly for small input
- added modified error functions erfc and erfi
- added the generalized exponential integral
- added the upper incomplete gamma function
- implemented the complete elliptic integral of the first kind
- implemented the arithmetic-geometric mean of complex numbers
- optimized arb_digamma for small integers
- made mag_log_ui, mag_binpow_uiui and mag_polylog_tail proper functions
- added pow, agm, erf, elliptic_k, elliptic_p as functions of complex power series
- added incomplete gamma function of complex power series
- improved code for bounding complex rising factorials (the old code could potentially have given wrong results in degenerate cases)
- added arb_sqrt1pm1, arb_atanh, arb_asinh, arb_atanh
- added arb_log1p, acb_log1p, acb_atan
- added arb_hurwitz_zeta
- improved parameter selection in the Hurwitz zeta function to try to avoid stalling when given enormous input
- optimized sqrt and rsqrt of power series when given a binomial as input
- made arb_bernoulli_ui(2^64-2) not crash
- fixed rgamma of negative integers returning indeterminate

- polynomials and matrices
- added characteristic polynomial computation for real and complex matrices
- added polynomial set_round methods
- added is_real methods for more types
- added more get_unique_fmpz methods
- added code for generating Swinnerton-Dyer polynomials
- improved error bounding in det() and exp() of complex matrices to recognize when the result is real-valued
- changed polynomial divrem to return success/fail instead of aborting on divide by zero

- miscellaneous
- added logo to documentation
- made inlined functions build as part of the library
- silenced a clang warning
- made _acb_vec_sort_pretty a library function

Ricky Farr also contributed a few helper methods, but I forgot to list them in the changelog. Thanks, anyway!