/*
 * --------------------------------
 *      테일러 전개 (cos (x))     *
 * --------------------------------
 */


#include <stdio.h>
#include <math.h>

double mycos(double);

int main(void)
{
    double x,rd=3.14159/180;
    printf("    x      mycos(x)        cos(x)\n");
    for (x=0;x<=180;x=x+10)
        printf("%5.1f%14.6f%14.6f\n",x,mycos(x*rd),cos(x*rd));

 return 0;
}
double mycos(double x)
{
    double EPS=1e-08;
    double s=1.0,e=1.0,d=1.0;
    int k;

    x=fmod(x,2*3.14159265358979);      /* x값을 0 ~ 2π에 맞춘다. */
    for (k=1;k<=200;k=k+2) {
        d=s;
        e=-e*x*x/(k*(k+1));
        s=s+e;
        if (fabs(s-d)<EPS*fabs(d))     /* 중단오차 */
            return s;
    }
    return 9999.0;                     /* 수렴하지 않을 때 */
}


// 테일러 전개는 중심에 가까울수록 좋은 근사를 나타내므로 x값은 0~2pi의 범위에 속하도록

도를 라이안(radian)으로 변환해서 계산한다.

+ Recent posts