菜鸟编程:泰勒级数求sinx 求解

zhao0829wang 2011-03-15 09:18:44
#include <stdio.h>
#include <math.h>
#define ex 0.000001
int main()
{
double x=0.0,temp,sin=0.0,i=0.0;
while(1){
printf("please input on number:");
scanf("%lf",&x);
temp=x;
while(fabs(temp)>ex)
{
sin+=temp;
i+=2;
temp = (-1) * temp*x*x/( (i+1)*(i) );
}
printf("sin(%lf)=%lf",x,sin);
printf("the number is %d\n",i);
}
return 0;
}

为什么输入50以上时候,数据就不正常了???
...全文
1620 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao0829wang 2011-03-20
  • 打赏
  • 举报
回复
楼上的回答都没有什么大的改观么。 。
ls251544415 2011-03-15
  • 打赏
  • 举报
回复
这个我也做过
首先,你是用角度还是弧度求sin?

结果与正常值产生的偏差,这与其收敛的快慢有关
收敛快,少量的计算可得到相对准确点的值
熟练慢,大量的计算都难得到精确的值

计算的数据越大,得到的结果偏差也越大。正弦函数是有周期性的,可以将很大的数据规范到[-π/2,π/2]
精确的位数越高,计算结果才越准确。你只计算到小数点后面6位,这种结果误差是很大的。

建议LZ钻研一下级数相关的知识
南气子水 2011-03-15
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>
#define ex 0.000001
int main()
{
double x=0.0,temp,sin=0.0,i=0.0;
while(1){
printf("please input on number:");
scanf("%lf",&x);
temp=x;
while(fabs(temp)>ex)
{
sin+=temp;
i+=2;
temp = (-1) * temp*x*x/( (i+1)*(i) );
}
printf("sin(%lf)=%lf",x,sin);
printf("the number is %lf\n",i);//这里是lf吧,i是小数
}
return 0;
}
南气子水 2011-03-15
  • 打赏
  • 举报
回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧