#include <stdio.h>
#include <math.h>
double power(int x, int n);
double fabsolute(double value);
double factorial(int n);
double cosine(double x);
double sine(double x);
double exponential(double x);
double power(int x, int n)
{
double pow = 1.0;
if(n else
while(n--)
pow *= (double)x;
return pow;
}
double fabsolute(double value)
{
if(value else return value;
}
double factorial(int n)
{
double fac = 1.0;
int i;
for(i = n; i > 0; i--)
fac *= (double)i;
return fac;
}
double cosine(double x)
{
double cosine = 0;
double add;
int i = 0;
do {
add = pow(-1, i) * pow(x, 2*i) / factorial(2*i);
cosine += add;
i++;
} while(fabs(cosine * 0.00005)
return cosine;
}
double sine(double x)
{
double sine = 0;
double add;
int i = 0;
do {
add = pow(-1, i) * pow(x, 2*i+1) / factorial(2*i+1);
sine += add;
i++;
} while(fabs(sine * 0.00005)
return sine;
}
double exponential(double x)
{
double exp = 0;
double add;
int i = 0;
do {
add = pow(x, i) / factorial(i);
exp += add;
i++;
} while(exp * 0.00005
return exp;
}
int main()
{
double x;
scanf("%lf", &x);
printf("%f %f %f\n", exponential(x), cosine(x), sine(x));
return 0;
}
만약 math.h를 안 쓰겠다면
fabs() 대신에 fabsolute() 를
pow() 대신에 power() 를 쓰시면 됩니다.
sine, cosine, exponential 각각의 do while 루프에
(exp * 0.00005 라는 조건은 오차를 0.005% 정도로 하겠다는 겁니다.
원래 maclaurin series의 정의대로 하면 무한루프가 되니까요^^