代码无法满足麦克劳林展开求cosx精度

问题遇到的现象和发生背景

在用麦克劳林展开求cosx的近似值时,当展开式最后一位小于0.001的精度时,出现错误结果

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <math.h>

double funcos( double e, double x );

int main()
{    
    double e, x;

    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
    
    return 0;
}

double funcos( double e, double x ){
    double rlt;       //输出结果 
    double k=1;         //计算出的每一项数 
    long t=1;          //计算每一项的分母阶乘  
    rlt = 0;
    
    for(int i=0;k>e;i=i+2){

        if(i!=0){
            t = t*(i-1);
            t = t*i;
        }
        
        k = (pow(x,i)/t);
        
        if(i%4==0){
            rlt = rlt + k;
        }else{
            rlt = rlt - k;
        }
        
        //printf("%f %d %f\n",k,t,rlt);   测试代码 
    }
    return rlt;
}


运行结果及报错内容

当输入:
0.001 -3.14
时,出现下列结果
cos(-3.14) = 0.017627
显然不正确,但是当输入:
0.01 -3.14
时,能出现正确答案

我的解答思路和尝试过的方法

我认为可能是double类型太小了,于是换成double double,阶乘的变量类型也换成了long,可是仍然没有解决问题

我想要达到的结果

知道上述代码错误原因,并获得解决方法