将实际浮点值与C中的浮点变量进行比较

use*_*829 -4 c

那么,我有这两个问题吗?

#include <stdio.h>
int main(void) 
{
    float a = 0.7;
    if (0.7 > a)
       printf("Hi\n");
    else
       printf("Hello\n");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这将是什么输出?据我说,它应该是"你好".

其次,我有,

#include <stdio.h>
int main(void)
{
    int a=500,b=100,c;
    if (!a >= 400)
       b=300;
    c=200;
    printf("%d %d\n",b,c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,输出应该是,

100 200
Run Code Online (Sandbox Code Playgroud)

因为!一个手段,而不是一个手段,这意味着,一个非500的值与400相比,它可以大于或小于400,那么为什么它会是300?

gna*_*729 5

您没有将浮点变量与浮点值进行比较.你认为你会这样做,但你不是.您正在将float变量与double literal进行比较.

在C中0.7是精确的数学数字0.7,四舍五入到最接近的双精度浮点数.

当初始化float a = 0.7时,该双精度浮点数被舍入为单精度,结果存储在a中.舍入很可能会改变该值,因此变量a的内容稍微多一点或略小于0.7.

然后你比较变量0.7.一个是四舍五入到单精度,另一个是四舍五入到双精度,所以两者都不同.

作为一项规则,你永远不应该使用浮动而不是双倍,除非你有充分的理由这样做,你可以在被问及时证明这一点.

另一方面,你有多大可能与这里的其他多个海报提出完全相同的问题(完全相同的数字,0.7而不是0.8或0.9或3.14或类似的东西),所以我想你正在尝试让我们在这里做你的功课吧?