2016-09-25 53 views
2

我做了一個簡單的程序來證明一個正確的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

回答

6

pow(x, y)通常實現爲exp(y log x)。這可能會引起爭論甚至看起來微不足道的價值。

您正在看到此效果。

處理浮點精度問題沒有硬性規定。與寬容相比,通常會將解決方案作爲一種解決方案,但挑選容忍水平或應該採用的方式本身並不重要。

對您而言,最好將a * a + b * bc * c;進行比較,特別是如果這些值始終爲整數值。