-3

一位朋友向我展示了这段 c 语言代码,我对它的输出感到非常困惑。谁能解释一下为什么输出“这是一块黑森林蛋糕,这很奇怪”,而不是“这是一块黑森林蛋糕这是一块黑森林蛋糕”?

# 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 的变量中double。你可以通过在数字后面加上 来获得一个float常数f。此外,if (b < 0.7)相比之下,浮点数被隐式转换为双精度;0.7可以更精确地存储为双精度数,因此在这种情况下是一个更大的数字,因为0.7当存储在浮点变量中时被四舍五入。

也试试下面的代码:

#include <stdio.h>

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