关于c语言fabs的一个疑问

[复制链接]
查看11 | 回复2 | 2011-5-16 19:52:48 | 显示全部楼层 |阅读模式
在oj上做题,最后输出时这样一个语句:printf("D:%.3lf\n",sqrt(fabs(a*a-b*b)));
期中a,b都是double,是求以a为斜边,b为直角边的直角三角形的另一直角边长的,但是一直wa,改成printf("D:%.3lf\n",sqrt(a*a-b*b));,即去掉fabs后就过了,很迷茫,求大牛解释~

回复

使用道具 举报

千问 | 2011-5-16 19:52:48 | 显示全部楼层
是不是系统要求比较钻牛角尖?fabs应该是double的啊,C99 里fabsf是float,l是long double的 或者用了fabs会出现,斜边比直角边小的情况也开方出个数来?不用fabs, 负数sqrt返回-1.#IO...
回复

使用道具 举报

千问 | 2011-5-16 19:52:48 | 显示全部楼层
把fabs(a*a-b*b)改为 (a*a-b*b)>0 ? (a*a-b*b) : -(a*a-b*b)把这句写到sqrt()里或者独立写成一句。fabs()精度问题我也不知。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行