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

问题描述:

我做了一个简单的程序来证明一个正确的triange,然后我用pow函数来多重输入like;比较c中的2个值总是返回false

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

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

+0

你对'a = 3,b = 4,c = 5'的第一个例子向我打印出'True'... –

+1

关于这个问题有几十个问题和答案。搜索浮点比较。 –

+0

oke谢谢你,对不起,因为我不知道关键字@RetiredNinja – Mamen

pow(x, y)通常实现为exp(y log x)。这可能会引起争论甚至看起来微不足道的价值。

您正在看到此效果。

处理浮点精度问题没有硬性规定。与宽容相比,通常会将解决方案作为一种解决方案,但挑选容忍水平或应该采用的方式本身并不重要。

对您而言,最好将a * a + b * bc * c;进行比较,特别是如果这些值始终为整数值。