aureooms/js-polynomial

View on GitHub
src/evaluate/horner.js

Summary

Maintainability
A
35 mins
Test Coverage

/**
* Model for a little endian polynomial evaluation function
* using Horner's algorithm.
*
* @param  {function} imov     number in place move function
* @param  {function} iadd     number in place addition function
* @param  {function} imul     number in place multiplication function
* @return {function} polynomial evaluation function
*/

export function __horner__ ( imov , iadd , imul ) {


    /**
    * Evaluates little endian polynomial [i , j[ for x
    * using Horner's algorithm.
    *
    * @param  {const polynomial}  p the polynomial to evaluate
    * @param  {index} i             left index of polynomial
    * @param  {index} j             right index of polynomial
    * @param  {const number} x      number for which the polynomial is evaluated
    * @param  {number} y            0 initialized number
    * @return {number}              param y
    */

    var horner = function ( p , i , j , x , y ) {

        if ( i < j ) {

            --j ;

            y = imov( y , p[j] ) ;

            while ( i < j ) {

                --j ;

                y = iadd( imul( y , x ) , p[j] ) ;

            }

        }

        return y ;

    } ;

    return horner ;

}