看看我的C语言程序怎么啦??请高手指教

来源:百度知道 编辑:UC知道 时间:2024/06/28 23:56:18
#include <stdio.h>
int main()
{
float a, b, c;
float A, B, C, D;

scanf("%f%f%f", &a, &b, &c);

A = a * a;B = b * b; C = c * c;D = A + B;

if (A + B == C)
printf("Yes\n");
else printf("No\n");

return 0;
}
一个看三角形是否构成直角的程序
若我输入0.3 0.4 0.5 程序会输出 No

可如果我把条件语句改成 D == C 的话
程序就会输出 Yes

这是怎么回事啊?跟浮点的精度有关吗?
可为什么A + B == C 变成 D == C 又行啦呢????
请指教!

变成D也是不好使的,还是NO,浮点数的比较不能这么比较,要用减法取绝对值比较,有一个可以允许的精度范围。这个范围是小数点后6个零,比如3.000001和3.000002就是不等,因为是6个以内。

我连写成A+B == D都输出 no了。但设断点看A+B==C的值是1的,但却直接跳到else了。相当诡异。。。顺便学习一下。

精度问题 浮点数在c/c++里面并非是非常准确的

不要 (A + B == C) 这样写,如果是float类型最好写作
(fabs(A + B - C) <= 1e-7)
包含头文件<math.h>

用 C==D 方便 没错

顺便学习下

要不你输入数据加上f试下?