核心结论,c 语言 fabs 是 math.h 头文件里面的库函数,功能是求 double 类型浮点数的绝对值,输入负数就转为正数,正数保持不变,原因是普通 abs 函数只支持整型,浮点数不能直接用 abs,所以标准库专门提供 fabs 处理 double,步骤是引入 math.h 头文件,调用 fabs 传入浮点参数,函数返回同类型绝对值结果,编译部分编译器需要额外链接数学库,结论,做浮点数比较误差判断的时候,fabs 是高频使用函数,注意区分 fabs 和 abs 适用数据类型。
基础参数表格
| 项目 | 内容 |
|---|---|
| 函数名 | fabs |
| 头文件 | math.h |
| 函数原型 | double fabs(double x) |
| 输入类型 | double 双精度浮点数 |
| 返回类型 | double |
| 功能 | 返回参数 x 的绝对值 |
深度内容讲解
第一 函数执行规则
如果 x 大于等于 0,返回 x 本身,如果 x 小于 0,返回负的 x,也就是把负号去掉,比如 fabs 负 3.14 得到 3.14,fabs5.6 得到 5.6。
第二 和 abs 函数核心区别
abs 是 stdlib.h 里面函数,只处理 int 整数,传入浮点数会发生隐式转换,丢失小数部分,得到错误结果,浮点数求绝对值必须使用 fabs。
补充,还有 fabsf 对应 float,fabsl 对应 long double 长双精度。
第三 编译注意事项
Linux gcc 环境编译带 fabs 代码的时候,经常需要加上 lm 参数链接数学库,写法 gcc test.c -o test -lm,不加有可能出现 undefined reference 报错,Windows VS 环境一般不需要额外加这个参数。
第四 典型应用场景
浮点数相等判断,因为浮点数存在精度误差,不能直接用等于号判断,一般写法 if fabs a 减 b 小于 极小值,用来判断两个浮点数是否近似相等,这个是 C 语言考试和项目里面最经典用法。
代码示例
include
include
int main()
{
double num = -12.34;
double res = fabs(num);
printf("结果是%.2f\n",res);
return 0;
}
输出结果 结果是 12.34
【常见问题】
问题 1 c 语言 fabs 是啥 可以用来求整数绝对值吗
回答 1 c 语言 fabs 是啥,虽然也能传入整数,但是设计目标是 double 浮点数,整数求绝对值推荐使用 abs,避免类型转换。
问题 2 c 语言 fabs 是啥 忘记写 math.h 会怎么样
回答 1 c 语言 fabs 是啥,没有引入 math.h,旧标准编译器会隐式声明函数,容易出现运行错误或者警告,新标准直接报错。
问题 3 c 语言 fabs 是啥 和 fabsf 有什么差别
回答 1 c 语言 fabs 是啥,fabs 处理 double,fabsf 处理 float,fabsl 处理 long double,根据变量类型选择对应函数。
免责申明:本内容属于 C 语言标准库语法科普,遵循 C 标准规范,代码仅用于学习参考,实际项目编写请结合编译环境验证。
