2016-09-25 4 views
2

私は右のトライアングルを証明する簡単なプログラムを作ってから、powのような入力を複数使用しています。は、常に2つの値を比較します。Cは常にfalseを返します。

if(pow(c,2) == (pow(a,2) + pow(b,2))){ 
    printf("True."); 
}else{ 
    printf("False."); 
} 

はその後、私は理由25 == 25 それが真でなければ、a = 3, b = 4, c = 5に値を入力しますが、私はこれにコードを変更した場合はfalse、

を返されたが:

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

おかげさまであり、ごめんなさい、私はキーワード@RetiredNinjaを知らないので – Mamen

答えて

6

pow(x, y)は通常exp(y log x)として実装されています。これは一見外見上些細な議論の値でさえも消える。

あなたはこれの効果を見ています。

浮動小数点精度の問題を扱うための厳密なルールはありません。公差との比較は、しばしば解決策として議論されますが、公差のレベルやそれを適用するべき方法を選ぶこと自体は自明ではありません。

あなたのケースでは、特にこれらが常に整数値である場合は、a * a + b * bc * c;を比較することをお勧めします。

関連する問題