//----------------------------------------------------------------------
//
//
Time-stamp: <30/01/01 00:43 Kenneth L Moore>
//
// :File:
horner.cpp
// :Purpose:
implement brute force and horner polynomial evaluation method
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// includes
#include
<cstdlib>
//----------------------------------------------------------------------
// typedefs,
globals
//----------------------------------------------------------------------
// function
declarations
float
eval_polynomial_brute( float C[], int n, float x );
float
eval_polynomial_Horner( float C[], int n, float x );
//----------------------------------------------------------------------
// function
definitions
/*
Brute force method of computing a polynomial. Does unnecessary multiplications
of powers of x.
C is a float array of coeffients. The last element is the coefficient
of x**n
n is the order of the polynomial equation.
x is the point at which to evaluate the function.
*/
float
eval_polynomial_brute( float C[], int n, float x ){
float y = 0.0;
for(int e = 0; e <=n; e++){
y = y + C[e]*pow(x,e);
}
return y;
}
/*
Implements a more efficient solution that relies on algebra to rearrange
the terms so that no power of x is ever done more than once.
C is a float array of coeffients. The last element is the coefficient
of x**n
n is the order of the polynomial equation.
x is the point at which to evaluate the function.
*/
float
eval_polynomial_Horner( float C[], int n, float x ){
float y = C[n];
for(int index = n-1; index >= 0; index--){
y = y*x + C[index};
}
return y;
}
//----------------------------------------------------------------------
int
main(int argc, char *arg[]) {
return EXIT_SUCCESS;
}
// eof
/******************************************************************************
Analysis:
A polynomial is f(x) = c[0]*x**0 + c[1]*x**1 + c[2]*x**2 ... c[n]*x**n
To do the brute force method x must be multiplied x**n; x**n-1; ...
x**2;
(x**n is n-1 multiplications). So in brute force we need n-1 + n-2
+ ... 1
multiplications.
To do the horner method, since there is an algebraic mainpulation.
c[0] + x*(c[1] + x(c[2] + ... + x(c[n]) we never do a redundant multiplication
of x so we need only do n-1 multiplications.
*******************************************************************************/