我做一个简单的程序来证明一个正确的triange,然后我使用pow函数来多次输入像;
if(pow(c,2) == (pow(a,2) + pow(b,2))){
printf("True.");
}else{
printf("False.");
}
Run Code Online (Sandbox Code Playgroud)
然后我输入了值a = 3, b = 4, c = 5,它应该是真的,因为25 == 25
它返回了一个假,
但如果我将代码更改为:
if((c*c) == ((a*a) + (b*b))){
printf("True.");
}else{
printf("False.");
}
Run Code Online (Sandbox Code Playgroud)
结果是真的
nb: input is a double
对此错误的任何解释?谢谢
pow(x, y)通常实现为exp(y log x).即使看似微不足道的参数值,这也可能会有所不同.
你看到了这个的影响.
处理浮点精度问题没有硬性规定.与容差相比,通常被认为是一种解决方案,但选择容忍度或应用方式本身并不是微不足道的.
在您的情况下,最好进行比较a * a + b * b,c * c;特别是如果它们始终是整数值.