C语言简易计算器计算不准确

为什么在计算一次后再次计算三角函数时的结果会不准确,在结果等于0时的时候很明显,比如除以或取余cos90度,sin360度时,不能在下一个函数中输出除数不能等于0的提示信息并退出程序,这个问题要怎么解决?代码如下

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
# define pi 3.1415926
int fuhao(char c);
double jisuan(double a, double b, int p);
double again1(double digit, double n, int p);
double again2(double digit, int c, double result);
int panduan(int d);
int radian_angle(int e);
double sin_cos_tan(int f);
int main()
{
    double a, b, digit = 0.0, n;
    char c, tmp;
    int d, e, h, c1;
    printf("若普通四则运算,输入1;若三角函数计算,输入2\n");
    scanf("%d", &d);
    if (panduan(d) == 1)
    {
        printf("请输入一个算式:\n");
        scanf("%lf%c%lf", &a, &c, &b);
        digit = jisuan(a, b, fuhao(c));
    }
    else if (panduan(d) == 2)
    {
        printf("radian:1 angle:2\n");
        scanf("%d", &e);
        digit = sin_cos_tan(radian_angle(e));
        printf("%lf\n", digit);
    }
    printf("continue?");
    scanf(" %c", &tmp);
    for (; tmp == 'Y';)
    {
        printf("继续四则运算:1 继续三角函数:2\n");
        scanf("%d", &h);
        if (h == 1)
        {
            printf("请继续输入运算符号与数据:\n");
            scanf(" %c%lf", &c, &n);
            digit = again1(digit, n, fuhao(c));
            printf("continue?");
            scanf(" %c", &tmp);
        }
        else if (h == 2)
        {
            printf("+:1 -:2 *:3 /:4 %%:5\n");
            scanf(" %d", &c1);
            printf("弧度:1 角度:2\n");
            scanf("%d", &e);
            digit = again2(digit, c1, sin_cos_tan(radian_angle(e)));
            printf("%lf\n", digit);
            printf("continue?");
            scanf(" %c", &tmp);
        }
        else
        {
            printf("在继续中输入四则运算还是三角错误");
            return 0;
        }
    }
    return 0;
}
int panduan(int d)
{
    if (d == 1)
        return 1;
    else if (d == 2)
        return 2;
    else
    {
        printf("第一次输入判断错误");
        exit(0);
    }
}
int fuhao(char c)
{
    switch (c)
    {
    case '+':
        return 1;
    case'-':
        return 2;
    case'*':
        return 3;
    case '/':
        return 4;
    case'%':
        return 5;
    default:
        printf("输入符号错误\n");
        exit(0);
    }
}
double jisuan(double a, double b, int p)
{
    double d;
    int d1;
    switch (p)
    {
    case 1:
        d = a + b;
        printf("%lf\n", d);
        return d;
    case 2:
        d = a - b;
        printf("%lf\n", d);
        return d;
    case 3:
        d = a * b;
        printf("%lf\n", d);
        return d;
    case 4:
        if(b==0)
        {
            printf("除数不能为0\n");
            exit(0);
        }
        d = a / b;
        printf("%lf\n", d);
        return d;
    case 5:
        if(b==0)
        {
            printf("除数不能为0\n");
            exit(0);
        }
        d1 = (int)a % (int)b;
        d = (double)d1;
        printf("%lf\n", d);
        return d;
    default:
        printf("第一次四则运算错误\n");
        exit(0);
    }
}
int radian_angle(int e)
{
    if (e == 1)
        return 1;
    else if (e == 2)
        return 2;
    else
    {
        printf("输入角度还是弧度错误");
        exit(0);
    }
}
double sin_cos_tan(int f)
{
    int g;
    double q;
    double radian, result, angle;
    if (f == 1)
    {
        printf("选择计算的内容:sin:1,cos:2,tan:3\n");
        scanf("%d", &g);
        printf("输入弧度:");
        scanf("%lf", &radian);
        switch (g)
        {
        case 1:
            result = sin(radian);
            return result;
        case 2:
            result = cos(radian);
            return result;
        case 3:
            result = tan(radian);
            return result;
        default:
            printf("选择sin cos tan弧度制错误");
            exit(0);
        }
    }
    else if (f == 2)
    {
        printf("选择计算的内容:sin:1,cos:2,tan:3\n");
        scanf("%d", &g);
        printf("输入角度:");
        scanf("%lf", &angle);
        q = (pi / 180) * angle;
        switch (g)
        {
        case 1:
            result = sin(q);
            return result;
        case 2:
            result = cos(q);
            return result;
        case 3:
            if (q == (pi / 2))
            {
                printf("tan不能计算90°\n");
                exit(0);
            }
            else
            {
                result = tan(q);
                return result;
            }
        default:
            printf("选择sin cos tan角度制错误");
            exit(0);
        }
    }
    else
    {
        printf("错误");
        exit(0);
    }
}
double again1(double digit, double n, int p)
{
    double d;
    int d1;
    switch (p)
    {
    case 1:
        d = digit + n;
        printf("%lf\n", d);
        return d;
    case 2:
        d = digit - n;
        printf("%lf\n", d);
        return d;
    case 3:
        d = digit * n;
        printf("%lf\n", d);
        return d;
    case 4:
        if(n==0)
        {
            printf("除数不能为0\n");
            exit(0);
        }
        d = digit / n;
        printf("%lf\n", d);
        return d;
    case 5:
        if(n==0)
        {
            printf("除数不能为0\n");
            exit(0);
        }
        d1 = (int)digit % (int)n;
        d = (double)d1;
        printf("%lf\n", d);
        return d;
    default:
        printf("输入再一次四则运算错误\n");
        exit(0);
    }
}
double again2(double digit, int c, double result)
{
    double again_result;
    int temp;
    switch (c)
    {
    case 1:
        again_result = digit + result;
        return again_result;
    case 2:
        again_result = digit - result;
        return again_result;
    case 3:
        again_result = digit * result;
        return again_result;
    case 4:
        if(result==0)
        {
            printf("除数不能为0\n");
            exit(0);
        }
        again_result = digit / result;
        return again_result;
    case 5:
        if(result==0)
        {
            printf("三角函数运算结果为0,除数不能为0\n");
            exit(0);
        }
        temp = (int)digit % (int)result;
        again_result = (double)temp;
        return again_result;
    default:
        printf("输入再一次三角错误\n");
        exit(0);
    }
}

因为你pi 3.1415926 小数点后位数太少.
cos90度计算精度不够, cos((pi / 180) * 90)结果是0.000000026794896585028633 不等于0

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
# define pi 3.1415926

int main()
{
    double a = cos((pi / 180) * 90);
    if (a==0)
    {
        printf("%.30lf 等于0\n", a);
    }
    else
    {
        printf("%.30lf 不等于0\n", a);
    }

    return 0;
}

结果
0.000000026794896585028633000000 不等于0