在 C 语言中,如果想要求一个数的绝对值,我们可以使用以下 4 个函数来实现(如下表所示)。
| 函数 | 说明 |
|---|---|
| abs() | 求 “整数” 的绝对值 |
| fabs() | 求 “双精度浮点数(double)” 的绝对值 |
| fabsf() | 求 “单精度浮点数(float)” 的绝对值 |
| fabsl() | 求 “长双精度浮点数(long double)” 的绝对值 |
注意:
- abs() 是
<stdlib.h>标准库的函数,而 fabs()、fabsf()、fabsl() 这 3 个是 <math.h> 标准库的函数。 - abs() 函数只能用于整数类型,而 fabs()、fabsf() 和 fabsl() 函数用于浮点数类型。
abs() 求 “整数” 的绝对值
在 C 语言中,我们可以使用 abs() 函数来求一个 “整数(int)” 的绝对值。
语法:
abs(x)说明:
abs() 函数的参数要求是一个整数,而不能是一个浮点数或其他类型数据。其中:
abs():求 int 的绝对值。labs():求 long 的绝对值(C99)。llabs():求 long long 的绝对值。
示例 1:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a = 666;
int b = -666;
printf("%d\n", abs(a));
printf("%d", abs(b));
return 0;
}运行结果如下。
666
666fabs() 求 “双精度浮点数” 的绝对值
在 C 语言中,我们可以使用 <math.h> 头文件中的 fabs() 函数来求一个 “双精度浮点数(double)” 的绝对值。
其中,fabs 是 “float absolute” 的缩写(虽然它用于 double 类型)。
语法:
fabs(x)说明:
fabs(x) 函数会返回双精度浮点数 x 的绝对值。
示例 2:
#include <stdio.h>
#include <math.h>
int main(void)
{
float a = -3.14f;
double b = -3.14;
long double c = -3.14L;
printf("%f\n", fabs(a));
printf("%f\n", fabs(b));
printf("%Lf", fabsl(c));
return 0;
}运行结果如下。
3.140000
3.140000
3.140000分析:
在上面例子中,fabs() 函数也可以接受 float 和 long double 类型数据作为参数,但此时会被隐式转换为 double。虽然不会报错,但这种方式并不是最佳实践。
fabsf() 求 “单精度浮点数” 的绝对值
在 C99 标准中,<math.h> 头文件提供了 fabsf() 函数用于求一个 “单精度浮点数(float)” 的绝对值。
语法:
fabsf(x)说明:
fabsf(x) 函数会返回单精度浮点数 x 的绝对值。
示例 3:
#include <stdio.h>
#include <math.h>
int main(void)
{
float a = -2.71828f;
printf("%f", fabsf(a));
return 0;
}运行结果如下。
2.718280分析:
fabsf() 函数接收一个 float 类型的浮点数作为参数,并返回该浮点数的绝对值。注意上面的浮点数使用了 “f” 后缀。
fabsl() 求 “长双精度浮点数” 的绝对值
在 C99 标准中,<math.h> 头文件提供了 fabsl() 函数用于求一个 “长双精度浮点数(long double)” 的绝对值。
语法:
fabsl(x)说明:
fabsl(x) 函数会返回长双精度浮点数 x 的绝对值。
示例 4:
#include <stdio.h>
#include <math.h>
int main(void)
{
long double a = -1.61803L;
printf("%Lf", fabsl(a));
return 0;
}运行结果如下。
1.618030分析:
fabsl() 函数接收一个 long double 类型的浮点数作为参数,并返回该浮点数的绝对值。注意,长双精度浮点数要使用 “L” 后缀,并且 printf() 的格式化说明符是 “%Lf” 。
