比较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
对此错误的任何解释?谢谢
答
pow(x, y)
通常实现为exp(y log x)
。这可能会引起争论甚至看起来微不足道的价值。
您正在看到此效果。
处理浮点精度问题没有硬性规定。与宽容相比,通常会将解决方案作为一种解决方案,但挑选容忍水平或应该采用的方式本身并不重要。
对您而言,最好将a * a + b * b
与c * c;
进行比较,特别是如果这些值始终为整数值。
你对'a = 3,b = 4,c = 5'的第一个例子向我打印出'True'... –
关于这个问题有几十个问题和答案。搜索浮点比较。 –
oke谢谢你,对不起,因为我不知道关键字@RetiredNinja – Mamen