std::abs(float), std::fabs, std::fabsf, std::fabsl
来自 cppreference.cn
定义于头文件 <cmath> |
||
定义于头文件 <cstdlib> |
||
(1) | ||
float abs( float num ); double abs( double num ); |
(直到 C++23) | |
constexpr /* floating-point-type */ abs( /* floating-point-type */ num ); |
(自 C++23 起) | |
定义于头文件 <cmath> |
||
(2) | ||
float fabs ( float num ); double fabs ( double num ); |
(直到 C++23) | |
constexpr /* floating-point-type */ fabs ( /* floating-point-type */ num ); |
(自 C++23 起) | |
float fabsf( float num ); |
(3) | (自 C++11 起) (constexpr 自 C++23 起) |
long double fabsl( long double num ); |
(4) | (自 C++11 起) (constexpr 自 C++23 起) |
附加重载 (自 C++11 起) |
||
定义于头文件 <cmath> |
||
template< class Integer > double fabs ( Integer num ); |
(A) | (自 C++11 起) (constexpr 自 C++23 起) |
1-4) 计算浮点数值 num 的绝对值。 库为所有 cv 非限定浮点类型提供了
std::abs
和 std::fabs
的重载,作为形参 num 的类型。(自 C++23 起)
A) 为所有整数类型提供了额外的重载,它们被视为 double。
|
(自 C++11 起) |
对于整型参数,std::abs
的整型重载 可能是更好的匹配。如果使用无法通过整型提升转换为 int 的无符号整型参数调用 std::abs
,则程序是非良构的。
目录 |
[编辑] 参数
num | - | 浮点值或整数值 |
[编辑] 返回值
如果成功,则返回 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'; // special values 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 被错误地要求 |
移除了该要求 |
[编辑] 参见
(C++11) |
计算整数值的绝对值 (|x|) (函数) |
(C++11)(C++11)(C++11) |
复制浮点值的符号 (函数) |
(C++11) |
检查给定数字是否为负数 (函数) |
返回复数的模 (函数模板) | |
将函数 abs 应用于 valarray 的每个元素 (函数模板) | |
C 文档 for fabs
|