
我只敲出了个大概,但是输入1,却没有结果,请帮我看一下,要用泰勒展开的方式去求sin(x)的近似值。
函数dervative()的参数x的数据类型改为double类型,然后还有其他地方需要修改下。
修改如下:
参考链接:
https://blog.csdn.net/Gnipilnehc/article/details/121119791
https://blog.csdn.net/LonelinessKid/article/details/121524757
https://zhidao.baidu.com/question/713170862613715325.html
#include <stdio.h>
#include <math.h>
double factorial(int n) {
double fac=1.0; // 这里存储阶乘结果的变量名和函数名同名了,为了避免混淆,将这个变量名修改下
for(int i=1; i<=n; i++) {
fac*=i;
}
return fac;
}
double derivative(double x) { // 这里将函数的参数x的数据类型改为double类型,以便和main()函数里传入的参数的数据类型相符
double sum=0;
int b=1;
int n=1;
double a;
// https://blog.csdn.net/Gnipilnehc/article/details/121119791
for(int i=1;; i+=2) { // 这里i必须每次增加2,以和泰勒展开式相符
a=pow(x,i)/factorial(i); // 将n改为i,即可,不需要使用一个变量n
sum+=b*a;
//printf("i=%d,a=%f,sum=%f,2n-1=%d,factorial(%d)=%f,pow()=%f\n",i,a,sum,2*n-1,i,factorial(i),pow(x*1.0,1.0*(2*n-1)));
b=-b;
// https://blog.csdn.net/LonelinessKid/article/details/121524757
// https://zhidao.baidu.com/question/713170862613715325.html
if(fabs(a)<1e-6) { // 这里是每一项的绝对值是否小于10的-6次方,所以将sum改为fabs(a),fabs()函数用于求double类型变量的绝对值
break;
}
// n++;
}
return sum;
}
int main(void) {
double x,f;
printf("请输入x的值:");
scanf("%lf",&x);
f=derivative(x);
printf("f(%lf)=%lf\n",x,f);
return 0;
}
