# std::abs(float), std::fabs, std::fabsf, std::fabsl

< cpp‎ | numeric‎ | math

定义于头文件 `<cmath>` |  |
定义于头文件 `<cstdlib>` |  |
float abs( float arg ); | (1) |
double abs( double arg ); | (2) |
long double abs( long double arg ); | (3) |
定义于头文件 `<cmath>` |  |
| (4) |
float fabs ( float arg ); |  |
float fabsf( float arg ); |  | (C++11 起)
double fabs ( double arg ); | (5) |
| (6) |
long double fabs ( long double arg ); |  |
long double fabsl( long double arg ); |  | (C++11 起)
double fabs ( IntegralType arg ); | (7) | (C++11 起)

1-6) 计算浮点值 `arg` 的绝对值。
7) 接受任何整数类型参数的重载集或函数模板。等价于 (5) （将参数转型为 double ）。

对于整数参数， `std::abs` 的整数重载更可能是较好的匹配。若以不能由整型提升转换成 int 的无符号整型参数调用 `std::abs` ，则程序为谬构。

### 参数

arg | - | 浮点或整数类型值

### 返回值

若成功，则返回 `arg` 的绝对值（ `|arg|` ）。值是准确的，且不依赖任何舍入模式。

### 错误处理

此函数不受制于任何指定于 math_errhandling 的错误条件。

若实现支持 IEEE 浮点算术（ IEC 60559 ），则

- 若参数为 ±0 ，则返回 +0
- 若参数为 ±∞ ，则返回 +∞
- 若参数为 NaN ，则返回 NaN

### 示例

    #include <iostream>
    #include <cmath>

    int main()
    {
        std::cout << "abs(+3.0) = " << std::abs(+3.0) << '\n'
                  << "abs(-3.0) = " << std::abs(-3.0) << '\n';
        // 特殊值
        std::cout << "abs(-0.0) = " << std::abs(-0.0) << '\n'
                  << "abs(-Inf) = " << std::abs(-INFINITY) << '\n'
                  << "abs(-NaN) = " << std::abs(-NAN) << '\n';
    }

可能的输出：

    abs(+3.0) = 3
    abs(-3.0) = 3
    abs(-0.0) = 0
    abs(-Inf) = inf
    abs(-NaN) = nan

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 2192 | C++98 | `std::abs` 的重载不一致地声明于二个头文件 | 在两个头文件中都声明这些重载
LWG 2735 | C++11 | 错误地要求了 `std::abs` 的对整数类型返回 double 的重载 | 移除该要求

### 参阅

abs(int)labs llabs (C++11) | 计算整数值的绝对值（ \(\small{|x|}\)|x| ） (函数)
copysign copysignf copysignl (C++11)(C++11)(C++11) | 复制浮点值的符号 (函数)
signbit (C++11) | 检查给定数是否为负 (函数)
abs(std::complex) | 返回复数的模 (函数模板)
abs(std::valarray) | 应用函数 std::abs 到 valarray 的每个元素 (函数模板)