evalpoly

Compile a C function for evaluating a polynomial.

Usage

var compile = require( '@stdlib/math/base/tools/evalpoly-compile-c' );

compile( c[, options] )

Compiles a C function for evaluating a polynomial having coefficients c.

var str = compile( [ 3.0, 2.0, 1.0 ] );
// returns <string>

The function supports the following options:

  • dtype: input argument floating-point data type (e.g., double or float). Default: 'double'.
  • name: function name. Default: 'evalpoly'.

In the example above, the output string would correspond to the following function:

/**
* Evaluates a polynomial.
*
* ## Notes
*
* -   The implementation uses [Horner's rule][horners-method] for efficient computation.
*
* [horners-method]: https://en.wikipedia.org/wiki/Horner%27s_method
*
* @param x   value at which to evaluate the polynomial
* @return    evaluated polynomial
*/
static double evalpoly( const double x ) {
    return 3.0 + (x * (2.0 + (x * 1.0)));
}

To generate a function having a custom name and supporting single-precision floating-point numbers, provide the corresponding options.

var opts = {
    'dtype': 'float',
    'name': 'polyval123'
};
var str = compile( [ 3.0, 2.0, 1.0 ], opts );
// returns <string>

For the previous example, the output string would correspond to the following function:

/**
* Evaluates a polynomial.
*
* ## Notes
*
* -   The implementation uses [Horner's rule][horners-method] for efficient computation.
*
* [horners-method]: https://en.wikipedia.org/wiki/Horner%27s_method
*
* @param x   value at which to evaluate the polynomial
* @return    evaluated polynomial
*/
static float polyval123( const float x ) {
    return 3.0f + (x * (2.0f + (x * 1.0f)));
}

Notes

  • The coefficients should be ordered in ascending degree, thus matching summation notation.
  • The function is intended for non-browser environments for the purpose of generating functions for inclusion in source files.

Examples

var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var compile = require( '@stdlib/math/base/tools/evalpoly-compile-c' );

// Create an array of random coefficients:
var coef = discreteUniform( 10, -100, 100 );

// Compile a function for evaluating a polynomial:
var str = compile( coef );
console.log( str );
Did you find this page helpful?