int main()
{
float lfResult = 19.893196;
if(lfResult == 19.893196)
printf("Works");
else
printf("does not work");
getch();
return 0;
}
出力: 機能しません
if
条件が失敗するのはなぜですか?
int main()
{
float lfResult = 19.893196;
if(lfResult == 19.893196)
printf("Works");
else
printf("does not work");
getch();
return 0;
}
出力: 機能しません
if
条件が失敗するのはなぜですか?
C では、浮動定数の型はdouble
です。試す:
float lfResult = 19.893196f;
if(lfResult == 19.893196f)
^
したがって、定数19.893196
は よりも精度が高くなりlfResult
ます。
6.4.4.2 - 4
サフィックスのない浮動定数の型は doubleです。文字 f または F の接尾辞が付いている場合は、float 型になります。l または L の文字が接尾辞として付いている場合は、long double 型になります。
あなたのリテラルは double であり、代入で float にキャストされます。
試す:
if(lfResult == 19.893196F)
...
if 条件では、19.893196 を double と見なすことができます。したがって、if 条件は失敗します。
次のようにしてみてください。
if(lfResult == 19.893196f)
お役に立てると思います。