使用函数求余弦函数的近似值

找了好久不知道什么问题,运行结果是-1.#IND00
百度过说是有分母0的情况出现,我分析了好久也没看出来哪里会可能这样
题目如下

img

img

答案注释了一些

double funcos( double e, double x ){
    double f=1.0; //cosx 当前值,因为第一项不论x给多少衡为1,初始给f的值1
    int i=1  ; //i是计数变量,从第二项开始算1
    while(fabs(x-f)>e){ //精度不够
        int jiecheng=1 , p=2*i; //jiecheng代表阶乘运算后的值 原谅我词穷不会起名字,p是代表阶乘的起点,找规律得出应该是2倍i
        while(p!=0){
            jiecheng*=p;
            p--;
        }
        f+=pow(-1,i)*pow(x,2*i)/jiecheng; //cosx 累加,每循环一次就新加一项,三部分组成:正负号、分子、分母
        i++;
    }
    return f;
}

你这个程序太乱了。
首先不能用x-f作为判断依据啊,x是自变量,f是因变量,完全不是一个事情;你的x如果输入1,那不是x-f=0,你得到的f就是1,cos(1)=1,不可能的事情。
然后,阶乘可能很大,用double变量会好些;我给你把误差设置为截断的,就是每次需要加的那个式子

#include<stdio.h>
#include<math.h>
double funcos( double e, double x ){
    double f; //cosx 当前值,因为第一项不论x给多少衡为1,初始给f的值1
    double err, df;
    double jiecheng;
    int p;
    int i; //i是计数变量,从第二项开始算1
    f = 1.0;
    err = 1.0;
    i = 1;
    while(err>e){ //精度不够
        jiecheng=1.; 
        p=2*i; //jiecheng代表阶乘运算后的值 原谅我词穷不会起名字,p是代表阶乘的起点,找规律得出应该是2倍i
        while(p!=0){
            jiecheng*=p;
            p--;
        }
        df=pow(-1,i)*pow(x,2*i)/jiecheng; //cosx 累加,每循环一次就新加一项,三部分组成:正负号、分子、分母
        
        f+=df;
        i++;
        err = fabs(df);
    }
    return f;
}
int main(){
    printf("%.6f", funcos(1e-5, 1.));
}

然后我推荐的cos的自编程(也是根据你的程序改的)

#include<stdio.h>
#include<math.h>
double funcos( double e, double x ){
    double f; //cosx 当前值,因为第一项不论x给多少衡为1,初始给f的值1
    double err, df, xn;
    double jiecheng;
    int p;
    int i; //i是计数变量,从第二项开始算1
    f = 1.0;
    err = 1.0;
    i = 1;
    jiecheng = 1。;
    xn = 1.;
    while(err>e){ //精度不够
        jiecheng*=(2*i-1)*(2*i);//每次乘两个数不就是(2i)!吗 【分母】 
        xn*=-x*x;//每次上面x的2i次方乘以-1的i次方就是这个【分子】 
        df = xn/jiecheng;//每次加这么多 
        f+=df;
        err = fabs(df);
        i++;
    }
    return f;
}
int main(){
    printf("%.6f", funcos(1e-5, 1.));
}

函数里输入参数是弧度,你如果想算角度,要除以180乘以π