evalpolyf

Evaluate a polynomial using single-precision floating-point arithmetic.

A polynomial in a variable x can be expressed as

where c_n, c_{n-1}, ..., c_0 are constants.

Usage

var evalpolyf = require( '@stdlib/math/base/tools/evalpolyf' );

evalpolyf( c, x )

Evaluates a polynomial having coefficients c and degree n at a value x, where n = c.length-1.

var Float32Array = require( '@stdlib/array/float32' );

var v = evalpolyf( new Float32Array( [ 3.0, 2.0, 1.0 ] ), 10 ); // => 3*10^0 + 2*10^1 + 1*10^2
// returns 123.0

The coefficients should be ordered in ascending degree, thus matching summation notation.

evalpolyf.factory( c )

Uses code generation to in-line coefficients and return a function for evaluating a polynomial using single-precision floating-point arithmetic.

var Float32Array = require( '@stdlib/array/float32' );

var polyval = evalpolyf.factory( new Float32Array( [ 3.0, 2.0, 1.0 ] ) );

var v = polyval( 10.0 ); // => 3*10^0 + 2*10^1 + 1*10^2
// returns 123.0

v = polyval( 5.0 ); // => 3*5^0 + 2*5^1 + 1*5^2
// returns 38.0

Notes

  • For hot code paths in which coefficients are invariant, a compiled function will be more performant than evalpolyf().
  • While code generation can boost performance, its use may be problematic in browser contexts enforcing a strict content security policy (CSP). If running in or targeting an environment with a CSP, avoid using code generation.

Examples

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

// Create an array of random coefficients:
var coef = discreteUniform( 10, -100, 100, {
    'dtype': 'float32'
});

// Evaluate the polynomial at random values:
var v;
var i;
for ( i = 0; i < 100; i++ ) {
    v = uniform( 0.0, 100.0 );
    console.log( 'f(%d) = %d', v, evalpolyf( coef, v ) );
}

// Generate an `evalpolyf` function:
var polyval = evalpolyf.factory( coef );
for ( i = 0; i < 100; i++ ) {
    v = uniform( -50.0, 50.0 );
    console.log( 'f(%d) = %d', v, polyval( v ) );
}
Did you find this page helpful?