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

在C语言中,数学运算时float变量为何与直接用3.0表现不同?

C语言中float变量与浮点字面量运算结果差异的原因

先看你给出的两个示例:

第一个代码:

#include <stdio.h>

int main(void){
    int score1 = 70, score2 = 58, score3 = 99;

    float total = 3;
    printf("Average: %f\n", (score1 + score2 + score3)/total);
}

运行结果为 75.666664

第二个代码:

#include <stdio.h>

int main(void){
    int score1 = 70, score2 = 58, score3 = 99;
    printf("Average: %f\n", (score1 + score2 + score3)/3.0);
}

运行结果为 75.666667

差异的核心原因是浮点数精度不同:

  1. 先计算总和:70+58+99=227,平均值是227/3=75.666666...(无限循环的十进制小数),二进制浮点数无法精确表示这个数,只能存储近似值。
  2. 使用float变量时:
    total是单精度浮点数(float),运算时int类型的227会被隐式转换为float。float的有效数字只有6-7位,对75.666666...的近似存储值更接近75.666664,因此输出该结果。
  3. 使用3.0字面量时:
    C语言中不带后缀的浮点字面量默认是双精度浮点数(double),运算时227会被转换为double。double的有效数字有15-17位,对75.666666...的近似存储值更接近75.666667,所以输出这个结果。

如果把第一个代码里的float total = 3;改成double total = 3;,你会发现输出结果和第二个代码一致,都是75.666667,这也验证了精度差异的影响。

内容的提问来源于stack exchange,提问作者Aces

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:07:49