我做了一个简单的程序来证明一个正确的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
对此错误的任何解释?谢谢
答案 0 :(得分:6)
pow(x, y)
通常以exp(y log x)
实施。即使是看似微不足道的价值观,也可能会出现这种情况。
你看到了这种效果。
处理浮点精度问题没有硬性规定。与容忍度相比较通常被认为是一种解决方案,但选择容忍度或应用方式本身并不是微不足道的。
在您的情况下,最好将a * a + b * b
与c * c;
进行比较,特别是如果它们始终是整数值。