用C语言实现sin()、cos()和tan()函数
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
double sin_1(double x)
{
int sign = 1; //符号
int itemCnt = 10; //泰勒级数展开多项式的项
int k = 0;
double result = 0;
double tx; // 展开式中各项的 x^(2k)
int factorial = 1; // 展开式中各项的(2K+1)!
// 标准化为正值 sin(-x) = -sinx
if(x<0)
{
x = -x;
sign *= -1;
}
// 标准化x的值为 0-2Π
while(x>2*PI)
{
x -= 2*PI;
}
// 把 0-2Π标准到0-Π
if(x>PI)
{
x -= PI; //sin(Π+x)= -sin(x)
sign *= -1;
}
//把 0-Π标准到 0-Π/2
if(x > PI/2)
{
x = PI-x; // sin(Π-x) = sin(x)
}
tx = x;
for(k=0; k<itemCnt; k++)
{
result += tx/factorial;
tx *= -(x*x);
factorial *= (2*(k+1))*(2*(k+1)+1);
}
// 根据符号的正负返回结果
if(sign == 1)
return result;
else
return -result;
}
double cos_1(double x)
{
return sin_1(PI/2-x); // sin(Π/2 -x ) = cos(x)
}
double tan_1(double x)
{
return sin_1(x)/cos_1(x); // tan(x) = sin(x)/cos(x)
}
int main(void)
{
printf("sin = %f\n",sin(50)); // math库中sin
printf("sin_1 = %f\n",sin_1(50)); // 自己编写的sin
printf("cos = %f\n",cos(50)); // math库中cos
printf("cos_1 = %f\n",cos_1(50)); // 自己编写的cos
printf("tan = %f\n",tan(50)); // math库中tan
printf("tan_1 = %f\n",tan_1(50)); // 自己编写的tan
}