std::abs, std::labs, std::llabs, std::imaxabs
来自cppreference.com
数值库
常用数学函数
| 函数 | |||||||||||||||||||||
| 基本运算 | |||||||||||||||||||||
|
|||||||||||||||||||||
| 指数函数 | |||||||||||||||||||||
| 幂函数 | |||||||||||||||||||||
| 三角与双曲函数 | |||||||||||||||||||||
| 误差与伽马函数 | |||||||||||||||||||||||||||||||||||||||||
| 临近整数的浮点运算 | |||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| 浮点操作函数 | |||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| 分类/比较 | |||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||
| 宏常量 | |||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
|
在标头
<cstdlib>
定义
|
||
|
在标头
<cmath>
定义
|
||
|
int
abs( int num );
|
(1) | (C++23 起 constexpr) |
|
long
abs( long num );
|
(2) | (C++23 起 constexpr) |
|
long long abs( long long num );
|
(3) | (C++11 起) (C++23 起 constexpr) |
|
在标头
<cstdlib>
定义
|
||
|
long
labs( long num );
|
(4) | (C++23 起 constexpr) |
|
long long llabs( long long num );
|
(5) | (C++11 起) (C++23 起 constexpr) |
|
在标头
<cinttypes>
定义
|
||
|
std::intmax_t
abs( std::intmax_t num
);
|
(6) | (C++11 起) (C++23 起 constexpr) |
|
std::intmax_t
imaxabs( std::intmax_t num
);
|
(7) | (C++11 起) (C++23 起 constexpr) |
计算整数 num 的绝对值。如果结果不能以返回类型表示,那么行为未定义。
如果以不能由整型提升转换成 int 的无符号整数类型参数调用
std::abs,那么程序非良构。
|
只有在 std::intmax_t 是扩展整数类型时,<cinttypes> 中才会提供
|
(C++11 起) |
参数
| num | - | 整数值 |
返回值
在可表示的情况下返回 num 的绝对值(即
|num|)。
注解
补码系统中,最负值的绝对值在范围外,例如对于 32 位补码类型 int,INT_MIN 是 -2147483648,但本应有的结果 2147483648 大于 INT_MAX,即 2147483647。
示例
运行此代码
#include <climits> #include <cstdlib> #include <iostream> int main() { std::cout << std::showpos << "abs(+3) = " << std::abs(3) << '\n' << "abs(-3) = " << std::abs(-3) << '\n'; // std::cout << abs(INT_MIN); // 补码系统上行为未定义 }
输出:
abs(+3) = 3 abs(-3) = 3
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2192 | C++98 | std::abs 的重载不一致地在两个头文件声明
|
在两个头文件中都声明这些重载 |
参阅
|
(C++11)(C++11)
|
浮点值的绝对值(\(\small{|x|}\)|x|) (函数) |
| 返回复数的模 (函数模板) |
|
| 应用函数 std::abs 到 valarray
的每个元素 (函数模板) |