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

sinx/cosx的泰勒展开式与库函数的比较_第1张图片

代码:

//#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;
}

你可能感兴趣的:(C++,机试)