C 求绝对值

在 C 语言中,如果想要求一个数的绝对值,我们可以使用以下 4 个函数来实现(如下表所示)。

C 求绝对值函数
函数 说明
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
666

fabs() 求 “双精度浮点数” 的绝对值

在 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” 。

上一篇: C 取整

下一篇: C 平方根

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号