2011-10-31 6 views
3

可能性の重複:なぜこの浮動小数点比較は真ですか?

出力:?

なぜこの現象が発生しなければ
Floating point comparison

私は次の出力を得るの下に、私は、コードを実行すると

#include <stdio.h> 

void main() 
{ 
    float a = 0.7; 
    if(a<0.7) 
    { 
     printf("if"); 
    } 
    else 
    { 
     printf("Else"); 
    } 
} 
+6

[すべてのプログラマーが浮動小数点演算について知っておくべきこと](http://floating-point-gui.de/) – Bart

+0

@downvoterは新しいユーザーによって同じ質問をするだけでパニックにはならない...閉じる重複していますが、それをダウンロートしないでください –

+0

これは、内部の作業が少し良くなっていることを示すアプレットです。http://www.h-schmidt.net/FloatApplet/IEEE754.html – ChrisWue

答えて

2

浮動小数点は正確な形式で格納されません。ほとんどの場合、お使いのプラットフォームは、これが原因でご使用のプラットフォーム上でのポイントを浮動の内部表現である

float a = 0.7; 

float a = 0.69999....; 

として解釈します。 Danielによって提供された linkは、あなたを始めなければなりません。

+2

これはなぜ<0.7ですか?コメント) –

0

これは、コンピュータの浮動小数点表示の精度の問題によるものです。 this Wikipedia articleを参照してください。

3

あなたのプログラムは、(変数aが含まれているものです)0.7float表現と(あなたがあなたのプログラムで0.7を書くとき、コンパイラが生成するものです)0.7double表現を比較します。 2つは同じではなく、ちょうどdoubleが少し大きくなっていることが起こります。

EDIT:(float)0.7は、16進表記でコンパクトに表すことができます。それは0x1.666666p-1です。 0.7double定数は0x1.6666666666666p-1なので、と若干大きくなります。

関連する問題