std::abs(float), std::fabs, std::fabsf, std::fabsl
来自cppreference.com
在标头 <cmath> 定义
|
||
在标头 <cstdlib> 定义
|
||
(1) | ||
float abs( float num ); double abs( double num ); |
(C++23 前) | |
constexpr /* 浮点类型 */ abs( /* 浮点类型 */ num ); |
(C++23 起) | |
在标头 <cmath> 定义
|
||
(2) | ||
float fabs ( float num ); double fabs ( double num ); |
(C++23 前) | |
constexpr /* 浮点类型 */ fabs( /* 浮点类型 */ num ); |
(C++23 起) | |
float fabsf( float num ); |
(3) | (C++11 起) (C++23 起 constexpr) |
long double fabsl( long double num ); |
(4) | (C++11 起) (C++23 起 constexpr) |
额外重载 (C++11 起) |
||
在标头 <cmath> 定义
|
||
template< class Integer > double fabs ( Integer num ); |
(A) | (C++11 起) (C++23 起 constexpr) |
1-4) 计算浮点值 num 的绝对值。标准库提供所有以无 cv 限定的浮点类型作为参数 num 的类型的
std::abs
和 std::fabs
重载。 (C++23 起)
A) 为所有整数类型提供额外重载,将它们当做 double。
|
(C++11 起) |
对于整数参数,std::abs
的整数重载通常是更好的匹配。如果以不能由整数提升转换成 int 的无符号整型参数调用 std::abs
,那么程序非良构。
参数
arg | - | 浮点或整数值 |
返回值
在成功时返回 arg 的绝对值(|arg|
)。值是准确的,且不依赖任何舍入模式。
错误处理
此函数不受制于任何指定于 math_errhandling 的错误条件。
如果实现支持 IEEE 浮点算术(IEC 60559),那么
- 在参数是 ±0 时返回 +0
- 在参数是 ±∞ 时返回 +∞
- 在参数是 NaN 时返回 NaN
注解
额外重载不需要以 (A) 的形式提供。它们只需要能够对它们的整数类型实参 num 确保 std::fabs(num) 和 std::fabs(static_cast<double>(num)) 的效果相同。
示例
运行此代码
#include <cmath> #include <iostream> 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++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2192 | C++98 | std::abs 的重载不一致地在两个标头声明
|
在两个标头中都声明这些重载 |
LWG 2735 | C++11 | 错误地要求了 std::abs 的对整数类型返回 double 的重载
|
移除该要求 |
参阅
(C++11) |
计算整数值的绝对值(|x|) (函数) |
(C++11)(C++11)(C++11) |
复制浮点值的符号 (函数) |
(C++11) |
检查给定数是否为负 (函数) |
返回复数的模 (函数模板) | |
应用函数 std::abs 到 valarray 的每个元素 (函数模板) |