2
#include <stdio.h>

main()
{
    float x;
    x = (float)3.3==3.3;
    printf("%f",x);

    x=(float)3.5==3.5;
    printf("\n%f",x);
}

私は最初のケースの答えが0.000で、2番目のケースの答えが1.00であると混乱しています。誰でも説明できますか?

4

2 に答える 2

4

表現

(float)3.3==3.3

double最初に値 3.3 を精度にキャストしfloat、それによってその値を変更します。これは、ターゲットの型で正確に表現できないためです。次に、比較の value` を変更せずに、そのfloat値が に変換されて戻され、比較で 0 (false) が返されます。double3.5 は両方の型で正確に表現できるため、比較は true (1) を返します。

次に、どちらの場合もint、比較の結果がfloat代入のために変換されます。

于 2012-10-01T15:01:05.457 に答える
0

デフォルトでは、右側の数値は浮動小数点数ではなく倍精度浮動小数点数に型キャストされます。両方のケースで1を出力するには、float型キャストをdoubleに変更するか、2番目の数値をfloatとして型キャストする必要があります。

float x;
x = (float)3.3==(float)3.3;
printf("%f",x);
x=(float)3.5==(float)3.5;
printf("\n%f",x);

また:

float x;
x = (double)3.3==3.3;
printf("%f",x);
x=(double)3.5==3.5;
printf("\n%f",x);
于 2012-10-01T15:07:26.943 に答える