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));
}
答案 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 ,确保其正确,然后继续。