C语言求cos精确值 泰勒公式

设计一个程序,输入x(0<=x<=1),使用以下公式,计算cos(x)的近似值,要求最后一项小于10的-6次方。
cos(x)=1-x2/2!+x4/4!-……

C语言程序:

#include <stdio.h>
#include <math.h>

int main()
{
double x;
double sum1, sum2, f = 1;
int i, t = 1;

printf("x:");
scanf("%lf", &x);
i = 1;
sum1 = sum2 = 1;
for(i=2; ; i*=2)
{
f *= (i -1);
f *= i;
t *= -1;
sum2 += t * pow(x, i) / f;

if(abs(sum2 - sum1) < 1e-6)
{
break;
}

sum1 = sum2;
}

printf("cos(%lf) = %lf\n", x, sum2);

return 0;
}


运行测试:

x:2
cos(2.000000) = -0.333333
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-08
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i = 1, n;
double Sum = 0.0, h=1.0, t,x;
scanf_s("%d %lf",&n,&x);
for (int j = 1; j <= n; j++)
{
h *= 0.1;
}
h *= 0.1;
t = 1.0;
x = x*x;
int m;
do
{
Sum += t;
m = (2 * i - 1)*(2 * i);
t = t*(-x / m);
i++;
}
while (fabs(t)>=h);
printf("%.10lf",Sum);
}
这是不用math.h而且精度可调的程序,想固定精度就取消对n的定义并把后面的n的值换成你想要的值即可,相信你也会调整显示的浮点数的位数
第2个回答  2014-05-08
#include<math.h>
#include<stdio.h>
main()
{
int n=2,count=1,sign=-1;
float x;
double sum ,term;
printf("input x:");
scanf("%f",&x);
sum=1;
term=1;
do
{
term=-term*x*x/(n*(n-1));
sum+=term;
n=n+2;
count++;
}
while (fabs(term)>=1e-6);
printf("cos(x)=%f,count=%d\n",sum,count);
}追问

虽然已经搞定了 不过还是谢谢

本回答被提问者采纳
第3个回答  2018-03-03
abs()会有精度损失
相似回答