You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段C程序输出Information Technology?新手技术求助

你的C程序输出不符合预期的原因

问题出在浮点数的精度存储特性上,核心两点:

  1. 类型不匹配导致的精度差异
    你定义的float x=3.14是单精度浮点数,但if(x == 3.14)里的3.14默认是双精度double类型。double的精度比float高,存储的3.14近似值更接近真实值,而float的3.14是低精度的近似值,两者实际存储的二进制数值并不完全相等,所以==判断结果为假,执行else分支输出Information Technology。

  2. 浮点数本身无法精确表示3.14
    3.14是十进制小数,但二进制浮点数(不管float还是double)无法精确表示这个数,只能存储近似值。直接用==比较浮点数几乎都是不可靠的,因为哪怕是同一个数值,不同精度的存储结果也会有细微差异。

解决办法

  • 方法一:让常量和变量类型一致
    把判断里的3.14改成3.14f(明确声明为float类型),这样两边的近似值一致,判断会成立:
#include<stdio.h>

int main() // 标准C规范中main函数应返回int类型,不建议用void
{
    float x=3.14;
    if (x == 3.14f)
        printf("Computers Science");
    else 
        printf("Information Technology");
    return 0;
}
  • 方法二:用精度范围比较(更通用)
    判断两个浮点数的差值是否小于一个极小的阈值(比如1e-6,即0.000001),只要差值在这个范围内,就认为两者相等:
#include<stdio.h>
#include<math.h> // 使用fabs函数需要包含此头文件

int main()
{
    float x=3.14;
    if (fabs(x - 3.14) < 1e-6)
        printf("Computers Science");
    else 
        printf("Information Technology");
    return 0;
}

内容的提问来源于stack exchange,提问作者x_x σɳιx x_x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:02:00