You need to enable JavaScript to run this app. C语言实现两分数求和时函数运行始终输出0.000的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现两分数求和时函数运行始终输出0.000的问题排查

代码异常根因与修复方案

核心错误点

  • 求和函数fracsum的返回值类型被错误声明为int,和内部计算的浮点结果类型完全不匹配。
    当函数执行return res时,原本是double类型的计算结果会被强制截断为整数(例如0.375会被直接截断为整数0),并以4字节宽度的int类型值返回。
    而printf在使用%.3f格式符输出时,是按照8字节宽度的双精度浮点数格式解析栈上的传入参数,内存读取错位后,拼接出的数值属于接近0的极小值,最终所有被解析的参数都会被输出为0.000,和实际运行现象完全吻合。
  • 次要有精度隐患:内部变量使用float类型存储运算中间值,容易在乘加计算过程中引入不必要的精度丢失。

修复方法

  • 将fracsum的返回值类型修改为double,保证返回值类型和printf的%.3f格式符要求的参数类型一致。
  • 将形参与中间计算变量的类型统一调整为double,降低浮点运算的精度误差。

修复后可正常运行的代码

# include <stdio.h>

double fracsum(double n1, double d1, double n2, double d2)
{
    double n3, d3;
    double res;
    n3 = (n1*d2) + (d1*n2);
    d3 = d1 * d2;
    res = n3 / d3;
    return res;
}

int main(void)
{
    printf("%.3f %.3f %.3f\n",
       fracsum(1,2,2,4),
       fracsum(1,4,1,8),
       fracsum(4,3,5,6));

    return 0;
}

预期运行输出

1.000 0.375 2.167

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 02:24:03