用C++编写函数mySin(x)计算正弦函数,请问如何搞定?介绍一种经典的算法,适合初学者,不要太复杂

来源:百度知道 编辑:UC知道 时间:2024/07/13 19:24:04
最好给出现成的程序加注释,在下有点忙,对C++也不是太懂,交差事的……

学过泰勒级数没?高数上的。
把sinx展开,变为一个多项式,sinx = 。。。。。。。。。。。。。。。。展开多少项,看你的精度要求,最后一项的绝对值就是精度。
公式记不住了,自己搜搜看

#include <stdio.h>
#include <math.h>
#define PI (4*atan(1))
#define ep 1e-6 //误差
double mySin(double x)
{
//sin(x)=(x)-((x)^3/(3!))+((x)^5/(5!))-((x)^7/(7!))...
int i;//项数
double c=1,s=0,xn;
//c为x^n前的系数,s为前n项的和,xn为x^n
int flag;
if(x<0) return -mySin(-x);

x=fmod(x,2*PI);
if(x<PI/2) {flag=1;xn=x;}
else if(x<PI) {flag=2;xn=x=PI-x;}
else if(x<3*PI/2) {flag=3;xn=x=x-PI;}
else {flag=4;xn=x=2*PI-x;}

for(i=1;c*xn>ep;++i)
{
if(i%2==1) s+=c*xn;
else s-=c*xn;
c/=(2*i)*(2*i+1);
xn*=x*x;
}
return flag<=2?s:-s;
}

int main()
{
printf("%.6lf",mySin(30*PI/180));//角度化弧度
return 0;
}

Ta