## 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 $O\left(1\right)$ temporary objects and divide and conquer schemes will use $O(logn)$ temporary objects, where $n$ 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.