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

C语言计算两点距离结果异常:原因及修复方案咨询

问题分析与解决:两点距离计算输出错误大数

问题原因

核心错误是printf格式符不匹配:

  • res 是 double 类型,但你使用了整数格式符 %d 输出。
  • %d 会把double的二进制内存内容当作整数解析,这就导致每次输出随机的大数,完全不符合预期。

另外你的getLength函数里有个逻辑细节问题:pow((a.y - b.y), 2) 和前面的pow((b.x - a.x), 2)写法不统一,不过因为平方的特性,正负值平方后结果一致,所以这个不影响最终计算值,但建议统一写法保持逻辑连贯。

修复方法

  1. 修正printf的格式符,把%d改成%f(printf中%f和%lf对double的处理等价):
    double res = getLength(p1, p2);
    printf("length is %f \n", res);
    // 若需要控制小数位数,比如保留2位,可写成:printf("length is %.2f \n", res);
    
  2. (优化建议)用乘法代替pow计算平方,效率更高且避免浮点数精度误差:
    double getLength(Point a, Point b) {
      double dx = b.x - a.x;
      double dy = b.y - a.y;
      double sum = sqrt(dx*dx + dy*dy);
      return sum;
    }
    

修复后运行结果

修正后代码会输出符合预期的结果:

length is 1.000000 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:20:28