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));
}
最佳答案
你缺少一些括号。而不是编写 acos((b*b + c*c - a*a)/2*b*c)
,
编写acos((b*b + c*c - a*a)/(2*b*c))
。否则,b*c
最终会成为分数的分子,而不是分母,并且您会尝试获取不可能数字的反余弦。
一般来说,当你遇到这样的问题时,简化和分解代码会有所帮助。如果acos
返回一个意外的值,那么它一定有一个不正确的参数。因此,计算 acos
的参数,将其放入变量中,打印那个,确保其正确,然后继续。
关于c - 为什么输出-1.#IND00 会出现浮点错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57831615/