#include
#include
int jiecheng(int n)
{
x09int result = 1;
x09if(n==0) return result;
x09else
x09{
x09x09while(n)
x09x09{
x09x09x09result *= n;
x09x09x09n--;
x09x09}
x09x09return result;
x09}
}
double dsin(double x)
{
x09double result = x;
x09int n = 3;
x09int sign = -1;
x09double temp;
x09while(1)
x09{
x09x09temp = pow(x,n)/jiecheng(n);
x09x09if(temp<0.000001)return result;
x09x09temp *= sign; //变号控制
x09x09result += temp;
x09x09n +=2;
x09x09sign *=-1;
x09}
}
int main()
{
x09double p;
x09p = 1;
x09printf("%lf%lf", dsin(p),sin(p));
x09return 0;
}
//double类型的数据有误差,但是结果在可接受范围内
//是利用泰勒展开进行运算,测试了sin(1)
//阶乘可能会溢出