fredrikj.net / blog /

# Arb 0.5

*March 28, 2013*

After a busy February and March, I’ve finally tagged Arb version 0.5. A summary of the changes:

- arithmetic and elementary functions
- added fmpr_get_fmpz, fmpr_get_si
- fixed accuracy problem with fmprb_div_2expm1
- special-cased squaring of complex numbers
- added various fmpcb convenience functions (addmul_ui, etc)
- optimized fmpr_cmp_2exp_si and fmpr_cmpabs_2exp_si, and added test code for comparison functions
- added fmprb_atan2, also fixing a bug in fmpcb_arg
- added fmprb_sin_pi, cos_pi, sin_cos_pi etc.
- added fmprb_sin_pi_fmpq (etc.) using algebraic methods for fast evaluation of roots of unity
- faster fmprb_poly_evaluate and evaluate_fmpcb using rectangular splitting
- added fmprb_poly_evaluate2, evaluate2_fmpcb for simultaneously evaluating the derivative
- added fmprb_poly root polishing code using near-optimal Newton steps (experimental)
- added fmpr_root, fmprb_root (currently based on MPFR)
- added fmpr_min, fmpr_max
- added fmprb_set_interval_fmpr, fmprb_union
- added fmpr_bits, fmprb_bits, fmpcb_bits for obtaining the mantissa width
- added fmprb_hypot
- added complex square roots
- improved fmprb_log to slightly improve speed, and properly support huge arguments
- fixed exp, cosh, sinh to work with huge arguments
- added fmprb_expm1
- fixed sin, cos, atan to work with huge arguments
- improved fmprb_pow and fmpcb_pow, including automatic detection of small integer and half-integer exponents
- added many more elementary functions: fmprb_tan/cot/tanh/coth, fmpcb_tan/cot, and pi versions
- added fmprb const_e, const_log2, const_log10, const_catalan
- fixed ball containment/overlap checking to work operate efficiently and correctly with huge exponents
- strengthened test code for many core operations

- special functions
- reorganized zeta function related code
- faster evaluation of the Riemann zeta function via sieving
- documented and improved efficiency of the zeta constant binary splitting code
- calculate error bound in Borwein’s algorithm with fmprs instead of using doubles
- optimized divisions in zeta evaluation via the Euler product
- use functional equation for Riemann zeta function of a negative argument
- compute single Bernoulli numbers using ball arithmetic instead of relying on the floating-point code in flint
- initial code for evaluating the gamma function using its Taylor series
- much faster rising factorials at high precision, using difference polynomials
- much faster gamma function at high precision
- added complex gamma function, log gamma function, and other versions
- added fmprb_agm (real arithmetic-geometric mean)
- added fmprb_gamma_fmpq, supporting rapid computation of gamma(p/q) for q = 1,2,3,4,6
- added real and complex digamma function
- fixed unnecessary recomputation of Bernoulli numbers
- optimized computation of Euler’s constant, and added proper error bounds
- avoid reliance on doubles in the hypergeometric series tail bound
- cleaned up factorials and binomials, computing factorials via gamma

- other
- added an fmpz_extras module to collect various internal fmpz helper functions
- fixed detection of flint header files
- fixed various other small bugs