Section: New Software and Platforms
Fast_polynomial: fast polynomial evaluation software
The library fast_polynomial (http://trac.sagemath.org/sage_trac/ticket/13358 ) provides fast evaluation and composition of polynomials over several types of data. It is interfaced for the computer algebra system Sage and its algorithms are documented (http://arxiv.org/abs/1307.5655 ). This software is meant to be a first step toward a certified numerical software to compute the topology of algebraic curves and surfaces. It can also be useful as is and is submitted for integration in the computer algebra system Sage.
This software is focused on fast online computation, multivariate evaluation, modularity, and efficiency.
Fast online computation. The library is optimized for the evaluation of a polynomial on several point arguments given one after the other. The main motivation is numerical path tracking of algebraic curves, where a given polynomial criterion must be evaluated several thousands of times on different values arising along the path.
Multivariate evaluation. The library provides specialized fast evaluation of multivariate polynomials with several schemes, specialized for different types such as mpz big ints, boost intervals with hardware precision, mpfi intervals with any given precision, etc.
Modularity. The evaluation scheme can be easily changed and adapted to the user needs. Moreover, the code is designed to easily extend the library with specialization over new C++ objects.
Efficiency. The library uses several tools and methods to provide high efficiency. First, the code uses templates, such that after the compilation of a polynomial for a specific type, the evaluation performance is equivalent to low-level evaluation. Locality is also taken into account: the memory footprint is minimized, such that an evaluation using the classical Hörner scheme will use temporary objects and divide and conquer schemes will use temporary objects, where is the degree of the polynomial. Finally, divide and conquer schemes can be evaluated in parallel, using a number of threads provided by the user.