C++|sinx/cosx的泰勒展开式与库函数的比较

【C++|sinx/cosx的泰勒展开式与库函数的比较】C++|sinx/cosx的泰勒展开式与库函数的比较
文章图片

代码:

//#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define accuracy 1e-7//精度10的-7次方 #define pi 3.1415926 using namespace std; //求解sin and cos //阶乘函数 unsigned long fac(unsigned long n){ unsigned long i,m; for(i = 0,m = 1; i <= n; i++ ){ if(i != 0) m = m*i; } return m; }double fcos(double x){ double temp = 0.0, t = 5; //temp为cos值 int i = 0; x = fabs(x); //处理double类型的浮点数 while(x >= 2*pi) x = x - 2*pi; //范围 0 ~ 2Π while( t >= accuracy){//每个泰勒展开式值做精度比较 t = (pow(x,2*i))/fac(2*i); //pow函数x的y次方 temp += pow(-1,i)*t; i++; } return temp; }double fsin(double x){ double temp = 0.0,t = 5; int i = 1; x = fabs(x); while(x > 2*pi) x = x - 2*pi; // while( t >= accuracy){ t = (pow(x,2*i-1))/fac(2*i-1); temp += pow(-1,i-1)*t; i++; } return temp; } int main() { double r,temp1,temp2; printf("请输入弧度(180°= Π):\n"); scanf("%lf",&r); //对应弧度值 temp1 = fcos(r); temp2 = fsin(r); printf("本地cos值:%.5lf\n",temp1); printf("系统cos值:%.5lf\n",cos(r)); printf("本地sin值:%.5lf\n",temp2); printf("系统sin值:%.5lf\n",sin(r)); return 0; }

    推荐阅读