Well, you should just specify the range of validity of your expansion.
Expansion used in your routine 
'Approximation is x - ( x**3 / 3! ) + ( x**5 / 5! ) - ( x**7 / 7! ) + ...'
is valid only around x=0.
Around some arbitrary value of x=a, you should make expansion
sin(x)=sin(a)+(x-a)*sin'(x|x=a)/1!+(x-a)^2*sin''(x|x=a)/2!+...
(where sin''(x|x=a) means second derivation of function sin(x) for x=a
etc.)

Here is a bit more specific Taylor series for sin(a+x):

sin(a+x)=sin(a)+x*cos(a)-x^2*sin(a)/2!-x^3*cos(a)/3!+x^4*sin(a)/4!+...+x^n*sin(a+n*PI/2)/n!

where you can specify values of sin(a) at the points of mesh (of
wanted density - the finer, the better) in the table (proposed before)
and then use expansion above to get values of sin() around that point.

Analogy can be used for cos(x).

Regards,
                                        Danko Radic
                                        Dept. of Physics
                                        University of Zagreb
                                        Croatia
------------------------------------------------------------

On Thu, 8 Apr 1999, Creative Digital Publishing Inc. wrote:

> >> I have been trying to use cosine and sine in my application.
> >> I have tried to use math.h but this doesn't seem to be a palmfile.
> >> Does anyone have a suggestion?
> 
> Here's some code that's worked fine for me. Hope it helps.
> 
> Regards,
> Steve Mann
> 
> # # #
> 
> #define       MINUS_ONE ( double ) -1.0
> #define       DEGS360_RADIANS 360.0 * DEGREES_TO_RADS
> #define       MAX_COS_ITERATIONS      10
> #define       MAX_SIN_ITERATIONS      10
> 
> /*****************************************************
> __sin
> 
> Calculate the sin of a double radians angle.
> Approximation is x - ( x**3 / 3! ) + ( x**5 / 5! ) - ( x**7 / 7! ) + ...
> *****************************************************/
> 
> double __sin ( double x ) {
> 
>       double  result, numerator, denominator, term, sign, factorial, x1;
>       int cnt = 0;
> 
> // scale input angle to proper range of values
> 
>       x1 = x;
>       while ( x1 > DEGS360_RADIANS ) {
>               x1 = x1 - DEGS360_RADIANS;
>       }
> 
> // initialize everything
> 
>       result  = x1;
>       numerator = x1;
>       denominator = ONE;
>       factorial = ONE;
>       sign = MINUS_ONE;
> 
>       for ( cnt = 0; cnt < MAX_SIN_ITERATIONS; cnt++ ) {
> 
> // calculate the next term
> 
>               numerator = numerator * x1 * x1;
>               denominator = denominator * ( factorial + ONE ) * (
> factorial + TWO );
>               term = numerator / denominator;
>               result = result + ( sign * term ) ;
> 
> // prepare for next sequence thru loop
> 
>               sign = sign * MINUS_ONE;
>               factorial       = factorial + TWO;
>       }
> 
>       return result;
> }
> 
> 
> /*****************************************************
> __cos
> 
> Calculate the cos of a double radians angle
> Approximation is 1 - ( x**2 / 2! ) + ( x**4 / 4! ) - ( x**6 / 6! ) + .....
> *****************************************************/
> 
> double __cos ( double x ) {
> 
>       double  result, numerator, denominator, term, sign, factorial, x1;
>       int     cnt = 0;
> 
> 
> // scale input angle to proper range of values
> 
>       x1                                      = x;
>       while ( x1 > DEGS360_RADIANS ) {
>               x1 = x1 - DEGS360_RADIANS;
>       }
> 
> // initialize everything
> 
>       result = ONE;
>       numerator = x1 * x1;
>       denominator = TWO;
>       factorial       = TWO;
>       sign = MINUS_ONE;
> 
>       for ( cnt = 0; cnt < MAX_COS_ITERATIONS; cnt++ ) {
> 
> // calculate the next term
> 
>               term = numerator / denominator;
>               result = result + ( sign * term ) ;
> 
> // prepare for next sequence thru loop
> 
>               numerator = numerator * x1 * x1;
>               denominator= denominator * ( factorial + ONE ) * (
> factorial + TWO );
>               factorial       = factorial + TWO;
>               sign = -sign;
>       }
> 
>       return result;
> }
> 
> -------------------------------------------
> Creative Digital Publishing Inc.
> 1317 Palm Street, San Luis Obispo, CA 93401-3117
> -------------------------------------------
> 805.788.0138            805.593.3811 (fax)
> [EMAIL PROTECTED]       http://www.cdpubs.com
> 
> 
> 
> 

Reply via email to