比较c中的2个值总是返回false

时间:2016-09-25 15:31:13

标签: c

我做了一个简单的程序来证明一个正确的triange,然后我使用pow函数来多次输入;

if(pow(c,2) == (pow(a,2) + pow(b,2))){
   printf("True.");
}else{
   printf("False.");
}

然后我输入了a = 3, b = 4, c = 5的值,它应该是真的,因为25 == 25 但它返回了一个错误,

但如果我将代码更改为:

if((c*c) == ((a*a) + (b*b))){
   printf("True.");
}else{
   printf("False.");
}

结果是真的

nb:input is a double

对此错误的任何解释?谢谢

1 个答案:

答案 0 :(得分:6)

pow(x, y)通常以exp(y log x)实施。即使是看似微不足道的价值观,也可能会出现这种情况。

你看到了这种效果。

处理浮点精度问题没有硬性规定。与容忍度相比较通常被认为是一种解决方案,但选择容忍度或应用方式本身并不是微不足道的。

在您的情况下,最好将a * a + b * bc * c;进行比较,特别是如果它们始终是整数值。