C语言计算两点距离结果异常:原因及修复方案咨询
问题分析与解决:两点距离计算输出错误大数
问题原因
核心错误是printf格式符不匹配:
res是double类型,但你使用了整数格式符%d输出。%d会把double的二进制内存内容当作整数解析,这就导致每次输出随机的大数,完全不符合预期。
另外你的getLength函数里有个逻辑细节问题:pow((a.y - b.y), 2) 和前面的pow((b.x - a.x), 2)写法不统一,不过因为平方的特性,正负值平方后结果一致,所以这个不影响最终计算值,但建议统一写法保持逻辑连贯。
修复方法
- 修正
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); - (优化建议)用乘法代替
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
相关产品推荐
相关产品推荐

