私はこの奇妙な行動に驚かされました:
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
誰かがこれを説明できますか?
私はこの奇妙な行動に驚かされました:
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
誰かがこれを説明できますか?
if
ステートメントの定数はです(double)3.14
。float
それはそのバージョンに非常に近いですが、正確に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?";
デフォルトでは、のような値3.14
はdoubleとして扱われますが、この値の1つをfloat変数に格納すると、精度が低下するためです。そのため、精度の違いに関連する微視的な違いがあります。ほとんどの場合、浮動小数点数を直接比較するべきではないのはこのためです。