一句话总结:abs 管整数,fabs 管浮点数,各司其职。
一、它们都是干啥的?
都是求绝对值,也就是把负数变正数:
- abs(-5) → 5
- fabs(-3.14) → 3.14
看起来一样?错! 用错了编译器会警告,结果还可能出错。
二、核心区别(记牢这张表)
| abs | <stdlib.h> | int | int | 整数取绝对值 |
| fabs | <math.h> | double | double | 浮点数取绝对值 |
三、代码演示(C 语言)
#include <stdio.h>
#include <stdlib.h> // abs
#include <math.h> // fabs
int main() {
int a = –10;
double b = –3.14;
printf("abs(-10) = %d\\n", abs(a)); // 输出 10
printf("fabs(-3.14) = %f\\n", fabs(b)); // 输出 3.140000
// 错误用法(虽然能编译,但会丢失精度或警告)
double wrong = abs(–3.14); // 隐式转 int,得到 3.0,丢掉小数
printf("%f\\n", wrong); // 输出 3.000000
return 0;
}
四、C++ 用户注意
在 C++ 中,<cmath> 提供了重载的 std::abs,可以自动适配整数和浮点数,所以你可以直接:
#include <cmath>
double x = std::abs(–3.14); // 正确,返回 double
int y = std::abs(–5); // 正确,返回 int
但如果你用的是 C 风格(abs 不带 std::),依然遵循整数规则。
五、避坑指南
- 对整数用 abs,对小数用 fabs(C 语言)。
- 别用 abs 算浮点绝对值,会截断小数。
- 包含正确头文件:<stdlib.h> 和 <math.h> 别漏。
六、最后一句
记住:abs 是整数的“直男”,fabs 是浮点的“精致 boy” —— 各用各的
如果你觉得有帮助,欢迎点赞、收藏、评论,让更多人看到!




