为什么在输出-1。#IND00时出现此浮点错误?

时间:2019-09-07 07:25:35

标签: c

printf("The Angle A Is: %f", (acos((b*b + c*c - a*a)/2*b*c)*180/3.14159265359));

这是一个简单的程序,如果输入了边a,b,c,则返回角度A。

我检查了三角形是否可行。

if((a+b) <= c || (b+c) <= a || (c+a) <= b)
    return 0;

对于某些输入,我得到正确的输出。对于1 1 1,我得到60

但是对于输入7 7 7,我得到的是-1.#IND00,而不是60

现在,我通过阅读another answer知道它代表不确定的值(特别是一个非零数字除以零),但事实并非如此。

那我为什么会收到这个错误?

这是完整的程序:

int main()
{
    float a, b, c;

    printf("Enter The Sides of The Triangle(a, b, c): ");
    scanf("%f %f %f", &a, &b, &c);

    if((a+b) <= c || (b+c) <= a || (c+a) <= b)
    {
        printf("Triangle Not Possible.");
        return 0;
    }

    printf("The Angle A Is: %f", (acos((b*b + c*c - a*a)/2*b*c)*180/3.14159265359));
}

1 个答案:

答案 0 :(得分:2)

您缺少一些括号。而不是写acos((b*b + c*c - a*a)/2*b*c)
 写acos((b*b + c*c - a*a)/(2*b*c))。否则,b*c会以分数的分子而不是分母结束,并且您尝试使用不可能数字的反余弦。

通常来说,当您遇到这样的问题时,它有助于简化和分解代码。如果acos返回意外值,则它必须具有不正确的参数。因此,计算acos的参数,将其放入变量中,打印 that ,确保其正确,然后继续。