正弦函数sinx的这个近似式怎么得到的? 正弦函数y sinx的性质
用C语言求多项式求sinx的近似值。
#include <stdio.h>
double factorial(double n)
{//求n!
double result=1;
for(int i=1;i<=n;i++)
{
result*=i;
}
return result;
}
double sinx(double x,int n)
{//求sin(x),精度为n
double result=0;
bool bAdd=true;//是加还是减
for(int i=1;i<=n;i++)
{
if(bAdd)
{
result+=((double)x*(2*i-1)/factorial(2*i-1));
}
else
{
result-=((double)x*(2*i-1)/factorial(2*i-1));
}
bAdd=!bAdd;
}
return result;
}
void main()
{
printf("%f\r\n",sinx(0.4,10));
}
C语言编程求正弦 sin(x) 的近似值
你这程序存在很多语法错误例如单精度浮点格式符是%f,不是f%,求阶乘不能用!,下面是我的程序,你可以参考一下:
#include <stdio.h>
#include <math.h>
int jiecheng(int x);//递归求阶乘
main()
{
double x,e,s,d;
int n;
n=0;
s=0;
printf("依次输入x和误差e\n");
scanf("%lf%lf",&x,&e);
d=s-sin(x);
if(d<0)d=-d;
printf("%lf\n",d);
while(d-e>0){
if(n==0)s+=x;
else{
s+=(pow(-1,n))*x*(2*n+1)/jiecheng(2*n+1);
d=s-sin(x);
if(d<0)d=-d;
}
n++;
}
printf("%lg\n%lg",s,sin(x));
}
long jiecheng(int x)
{
int y;
if(x>1)return x*jiecheng(x-1);
return 1;
}
我用了双精度浮点,64位,但因为过程出现很多位小数,只要你设置的误差太小,依然会出现数据溢出,你可以尝试一下无符号双精度,或者设置其他条件限制