最后一个WA

P5735 【深基7.例1】距离函数

cnbb12 @ 2020-08-15 22:38:30

abs精度丢失问题

最开始计算两点间距离时,使用了abs函数来求两点之差的绝对值,结果最后一个WA了。

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h> 

double f(double a1,double b1,double a2,double b2){
    double d1,d2,d;
    d1 = abs(a2-a1);
    d2 = abs(b2-b1);
    d = sqrt(d1*d1+d2*d2);
    return d;
}
int main(){
    double x1,y1,x2,y2,x3,y3;

    scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
    printf("%.2lf",f(x1,y1,x2,y2)+f(x1,y1,x3,y3)+f(x2,y2,x3,y3));

    return 0;
} 

用数据调试发现abs(double)计算出来的结果有偏差。比如abs(23.234+99.99)结果为123.00,找了度娘,没搞清楚,后来发现本题可以不用abs,删掉后就AC后,只是不太理解,拜托各位大佬解惑!


by Talrity_sym_Forever @ 2020-08-15 22:40:14

me too


by Terrible @ 2020-08-15 23:01:04

abs()返回值是整数类型的吧。

浮点型用fabs()。


|