问题如下:
利用泰勒级数:
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的。
对!这是一个问题,先谢过。不过我照这样改了之后,还是有问题,输入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,循环完后相当于除以一个阶乘了