900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C语言 用泰勒展开公式计算sin(x)的值

C语言 用泰勒展开公式计算sin(x)的值

时间:2022-04-25 14:45:43

相关推荐

C语言 用泰勒展开公式计算sin(x)的值

一、题目

008:计算直到最后一项的绝对值小于10^-7时,停止计算。x由键盘键入。

(书例3.32)

二、代码实现

思路:当最后一项满足绝对值限制条件时,停止累加求和

代码如下:

//008:计算sin(x)=x-x^3/3!+x^5/5!-x^7/7!+...,直到最后一项的绝对值小于10^-7时,停止计算。x由键盘键入#include<stdio.h>#include<math.h>#define eps 1e-7 //定义一个常量,注意不要加分号!!int main(){double item=0,sum=0,x;//每一项:item;累加和:sum;int i;printf("please input:\n");scanf("%lf",&x);//注意scanf()接受double类型要用%lfitem=x;for(i=1;fabs(item)>=eps;i++){sum+=item;item*=((-1)*x*x)/(2*i*(2*i+1));//for循环进行累加}printf("sin(%f)=%f\n",x,sum);return 0;}

运行结果

please input:4sin(4.000000)=-0.756803按任意键关闭终端。

please input:20sin(20.000000)=0.912945按任意键关闭终端。

暂不考虑精度问题,当输入的x稍微大一点,程序输出便会错误,比如:

please input:40sin(40.000000)=1.069746按任意键关闭终端。

这里考虑对变量进行优化,将其全部改成0到2π范围,再进行近似计算(因为sin()是周期函数),使用一个递归即可,修改后如下:

//008:计算sin(x)=x-x^3/3!+x^5/5!-x^7/7!+...,直到最后一项的绝对值小于10^-7时,停止计算。x由键盘键入#include<stdio.h>#include<math.h>#define eps 1e-7 //定义一个常量,注意不要加分号!!#define pi 3.1415926double fix_sin(double t){double x1;//返回修正后的x值if(t>=0&&t<=2*pi)x1=t;else if(t>0)x1=fix_sin(t-2*pi);elsex1=fix_sin(t+2*pi);return x1;//使用递归来修正}int main(){double item=0,sum=0,x,x2;//每一项:item;累加和:sum;int i;printf("please input:\n");scanf("%lf",&x);//注意scanf()接受double类型要用%lfx2=x;x=fix_sin(x);item=x;for(i=1;fabs(item)>=eps;i++){sum+=item;item*=((-1)*x*x)/(2*i*(2*i+1));//for循环进行累加} printf("sin(%f)=%f\n",x2,sum);return 0;}

再次计算:

please input:40sin(40.000000)=0.745113按任意键关闭终端。

please input:-150000sin(-150000.000000)=-0.998696

修改后的代码可以处理更大一点的x(大概输入-20万到20万都行)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。