-3

友人がこの C 言語コードを見せてくれましたが、その出力に非常に困惑しています。「It was a piece of black forest cakeIt was a piece of black forest cake」ではなく、「It was a piece of black forest cakeThis is kind」という出力が得られる理由を説明してください。

# include <cstdio>

using namespace std;

int main()
{
    float a = 0.5;

    if(a < 0.5) 
        printf("This is Weird");
    else 
        printf("It was a piece of black forest cake");

    float b = 0.7;
    if(b < 0.7)
        printf("This is Weird");
    else 
        printf("It was a piece of black forest cake");

    return 0;
}
4

1 に答える 1

3

これは0.5、フロートとして正確に表示できるのに対し、0.7できないためです。また、これらはどちらもdouble定数です。つまり、標準精度で格納するには、 type の変数に格納する必要がありますdoublefloat数値の末尾に を付けることで、定数を取得できますf。さらにif (b < 0.7)比較すると、float は暗黙的に double に変換されます。0.7はより正確に double として格納できます。したがって、この場合はより大きな数値になり0.7ます。これは、float 変数に格納されるときに が切り捨てられるためです。

次のコードも試してください。

#include <stdio.h>

int main()
{   
    if (0.7f < 0.7) {
       printf("This is Weird");
    }
    return 0;
}
于 2013-08-24T15:01:59.047 に答える