1

私はこの奇妙な行動に驚かされました:

float pi = 3.14;

if(pi == 3.14)
    cout << "OK";
else
    cout << "How is it possible?";

誰かがこれを説明できますか?

4

2 に答える 2

4

ifステートメントの定数はです(double)3.14floatそれはそのバージョンに非常に近いですが、正確に3.14表されていないため、正確に同じではありません。

1.25正確に表すことができるまたは他の数字で同じトリックを試してみてください。そうすれば、が得られますOK

float num = 1.25;
if(num == 1.25)
    cout << "OK";
else
    cout << "How is it possible?";

にキャスト3.14して:floatを取得することもできます。OK

float pi = 3.14;

if(pi == (float)3.14)
    cout << "OK";
else
    cout << "How is it possible?";
于 2012-05-31T18:51:30.457 に答える
1

デフォルトでは、のような値3.14はdoubleとして扱われますが、この値の1つをfloat変数に格納すると、精度が低下するためです。そのため、精度の違いに関連する微視的な違いがあります。ほとんどの場合、浮動小数点数を直接比較するべきではないのはこのためです。

于 2012-05-31T18:51:35.253 に答える