C语言求sin(x)的近似值

sin(X)=x-(x^3/3!)+(x^5/5!)-(x^7/7!)+.....+(-1)^n[x^(2n+1)/(2n+1)!]求用C语言写代码,精度为10的-5次方... sin(X)=x-(x^3/3!)+(x^5/5!)-(x^7/7!)+.....+(-1)^n[x^(2n+1)/(2n+1)!]求用C语言写代码,精度为10的-5次方。我写的代码如下:#include <stdio.h>#include <math.h>void main(){    int a,b,n,A,temp;    float eps,c,d,sin;    temp=-1;    sin=0.0; c=1.0;    n=0;    eps=10e-6;    scanf("%f",&d);    do    {        n++;        b=2*n-1;  A=1;     for(a=1;a<=b;a++)     {      A=A*a;     }     temp=-temp;        c=pow(d,b);        sin=sin+temp*c/A;    }while( fabs(c/A)>=eps);    printf("%f\n",sin);    }用Debug检查发现在a=17之后就会出现数据溢出现象,也就是大概在|x|>3时结果就会出错,请问该如何改进算法?或者该怎样写代码?呵呵,命名上有些不足,读代码有些累,还望高手指点。 展开
 我来答
清春年少
2012-11-19 · 超过22用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:43.8万
展开全部
时间复杂度太大,可以讲sin(x)看做泰勒公式数列和的形式,运用后项除了前项的递推实现。参考代码如下 main()
{
int n=1;
float x;
double sum ,term;
printf("input x:");
scanf("%f",&x);
sum=x;
term=x;
do
{
term=-term*x*x/((n+1)*(n+2));
sum=sum+term;
n=n+2;
}
while (fabs(term)>=1e-5);
printf("sin(x)=%f\n",sum);
}
vivitsone
2011-06-28
知道答主
回答量:9
采纳率:0%
帮助的人:0
展开全部
把A换成double 或者 float 都行
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式