C语言利用泰勒公式,计算sin(x)!!急

问题如下:
利用泰勒级数:

sin(x)=x-(x3/3!)+(x5/5!)-(x7/7!)+(x9/9!)-...
计算sin(x)的值,要求最后一项的绝对值小于10-5,并统计出此时累加了多少项。

我自己编的如下(知道更简洁的方法了,但是不知道这个为什么错):

#include<stdio.h>

void main()

{
float x;
double k,s;
int y,n,m,z=1,h=1;

printf("input x:");
scanf("%f",&x);

s=x;
k=x*x*x;

for(m=2,y=3;;k=k*x*x,y+=2,m++)
{
for(n=1;n<=y;n++)
{
h=h*n;
}
z=-z;
s+=k/(z*h);
if(k/h<1e-5)
{
printf("sin(x)=%f,count=%d\n",s,m);break;
}
}
}
图方便-。-字母随便找的
m就是算第几项小于1e-5的。

第1个回答  2014-04-20
第十八行改为:
18:for(n = 1,h = 1;n <= y;n++)
注意,每当h被使用时,要首先初始化。追问

对!这是一个问题,先谢过。不过我照这样改了之后,还是有问题,输入3,正确应是0.4几,我的输出确实-0.3几,愁死了

追答

经过调试,找出错误了。
原因主要是h溢出了。在计算次数大于9以后,h大于了int最大值。

把h改为double类型的。

本回答被提问者采纳

C语言利用泰勒公式,计算sin(x)!!
temp *= sign; \/\/变号控制result += temp;n +=2;sign *=-1;}}int main(){double p;p = 1;printf("%lf %lf", dsin(p),sin(p));return 0;}\/\/double类型的数据有误差,但是结果在可接受范围内\/\/是利用泰勒展开进行运算,测试了sin(1) \/\/阶乘可能会溢出 ...

求C语言大神,利用泰勒公式计算sin(x)的值,要求输入x(弧度值),当精度小 ...
=0) \/*0的阶乘为1*\/ m = m * i; } return m;}double fsin(double x) \/*计算sin(x)*\/{ double tmp, t; \/*tmp存储每次计算完的值*\/ int i; \/*t代表泰勒展开式每一项*\/ while(x>=2*PI) \/*最多只有2π个弧度*\/ x = x - 2*PI; ...

C语言根据泰勒公式计算sin(x),
int i=1;float x,a,c,b=1.0;double s=0;

求C语言大神,利用泰勒公式求sin(x)的值。要求输入x(弧度值),当精度小 ...
=EOF) {x\/=180.0;x*=3.1415926535897238462643383279; sum=0;a=1;i=1; do { b=2*i-1; sum=sum+(a*pow(x,b))\/jiechen(b); a=-a;i++; }while(((pow(x,b))\/jiechen(b))>=pow(10,-n));printf("%0....

如何用C语言求正弦函数,要求精确到小数点后六位
\/*泰勒公式求sin(x)*\/#include <stdio.h>int main() {double x,s1,e,s=0;int n=1;e=0.000001; \/*误差上限位六位小数*\/printf("求sin(x)\\n请输入x(弧度):");scanf("%lf",&x); s1=x;do {s+=s1; \/*s1为中间变量*\/s1=-s1*x*x\/(n+1)\/(n+2); n+=2;} while (...

c语言,如何用泰勒公式求sinx?
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;count++;}while (fabs(term)>=1e-5);\/\/这里可以改精度,我给你的是10的-5次方的精度 printf("sin(x)=%g,count=%d\\n",sum,count); return 0;} ...

sinX的泰勒公式展开式用C语言怎么编写?非常急
include<stdio.h> main(){ int n=1,count=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;count++;} while (fabs(term)>=1e-5);printf("sin(x)=%f,count=%d\\n",sum,count...

怎么用c语言编正弦函数计算
1、C语言中要编写sin函数,实质上要利用sin的泰勒公式,然后根据泰勒公式,将其中的每一项进行分解,最后用循环,累加计算出最终结果。2、下面用for循环实现sin的算法,程序代码如下:include<stdio.h>#include<math.h>void main(){ int i; float x,sum,a,b; \/\/sum代表和,a为分子,b为分母...

C语言,用泰勒公式计算sin值,求帮忙找错...
把 scanf("%lf",&x);改成 scanf("%d",&x);你这程序效率会比较很低!应该找到泰勒展开中,每前后两项之间的关系,采用迭代计算以减少计算次数,提高效率。

C语言用泰勒公式求sin
b=b\/j语句放在for循环内,每次循环j会减1,循环完后相当于除以一个阶乘了

相似回答