我正在尝试使用 maclaurin 的系列编写一个将x
作为输入并作为输出的代码。我正在使用 while 循环,直到两个连续结果的差异小于 then 。我使用类型来容纳更大的值。代码在范围内时有效,但如果大于或小于此范围,则输出为。为什么会这样?输出值是否超出范围?我怎样才能解决这个问题 ??cos(x)
0.001
double
x
[-2,2]
x
-1.#IND00
我的代码是:
#include <stdio.h>
double abs(double a);
double power(double p, int q);
int fact(int a);
int main()
{
int i=1,j=2*i;
double x,s=1.0,p,l=0.001;
printf("Enter x: ");
scanf("%lf", &x);
p = s+ power(-1,i) * power(x,j) / fact(j);
while (abs(p-s)>l){
i++; j=2*i;
s=p;
p = s+ power(-1,i) * power(x,j) / fact(j);
}
printf("cos(%f) = %f", x,p);
return 0;
}
double abs(double a)
{
if (a>=0) return a;
else return (-a);
}
double power(double p, int q)
{
int i;
double a=1.0;
for (i=0; i<q; i++){
a=a*p;
}
return a;
}
int fact(int a)
{
int i,p=1;
if (a==0 || a==1) return 1;
else
while (a!=1){
p=p*a;
a--;
}
return p;
}