C++
编译器支持
自由(freestanding)与宿主(hosted)
语言
标准库
标准库头文件
具名要求
特性测试宏 (C++20)
语言支持库
概念库 (C++20)
诊断库
内存管理库
元编程库 (C++11)
通用工具库
容器库
迭代器库
范围库 (C++20)
算法库
字符串库
文本处理库
数值库
日期和时间库
输入/输出库
文件系统库 (C++17)
并发支持库 (C++11)
执行控制库 (C++26)
技术规范
符号索引
外部库
[编辑] 数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
基本线性代数算法 (C++26)
数据并行类型 (SIMD) (C++26)
浮点环境 (C++11)
复数
数值数组 (valarray)
伪随机数生成
位操作 (C++20)
因子运算
gcd(C++17)
lcm(C++17)
插值
midpoint(C++20)
lerp(C++20)
饱和算术
add_sat(C++26)
sub_sat(C++26)
saturate_cast(C++26)
mul_sat(C++26)
div_sat(C++26)
通用数值运算
iota(C++11)
ranges::iota(C++23)
accumulate
inner_product
adjacent_difference
partial_sum
reduce(C++17)
transform_reduce(C++17)
inclusive_scan(C++17)
exclusive_scan(C++17)
transform_inclusive_scan(C++17)
transform_exclusive_scan(C++17)
[编辑] 常用数学函数
函数
基本操作
abs(int)labsllabsimaxabs(C++11)
abs(float)fabs
divldivlldivimaxdiv(C++11)
fmod
remainder(C++11)
remquo(C++11)
fma(C++11)
fmax(C++11)
fmin(C++11)
fdim(C++11)
nannanfnanl(C++11)(C++11)(C++11)
指数函数
exp
exp2(C++11)
expm1(C++11)
log
log10
log1p(C++11)
log2(C++11)
幂函数
sqrt
cbrt(C++11)
hypot(C++11)
pow
三角和双曲函数
sin
cos
tan
asin
acos
atan
atan2
sinh
cosh
tanh
asinh(C++11)
acosh(C++11)
atanh(C++11)
误差函数和伽马函数
erf(C++11)
erfc(C++11)
lgamma(C++11)
tgamma(C++11)
取整浮点运算
ceil
floor
roundlroundllround(C++11)(C++11)(C++11)
trunc(C++11)
nearbyint(C++11)
rintlrintllrint(C++11)(C++11)(C++11)
浮点操纵函数
ldexp
scalbnscalbln(C++11)(C++11)
ilogb(C++11)
logb(C++11)
frexp
modf
nextafternexttoward(C++11)(C++11)
copysign(C++11)
分类和比较
fpclassify(C++11)
isfinite(C++11)
isinf(C++11)
isnan(C++11)
isnormal(C++11)
signbit(C++11)
isgreater(C++11)
isgreaterequal(C++11)
isless(C++11)
islessequal(C++11)
islessgreater(C++11)
isunordered(C++11)
类型
div_t
ldiv_t
lldiv_t(C++11)
imaxdiv_t(C++11)
float_t(C++11)
double_t(C++11)
宏常量
HUGE_VALFHUGE_VALHUGE_VALL(C++11)(C++11)
math_errhandlingMATH_ERRNOMATH_ERREXCEPT(C++11)
INFINITY(C++11)
NAN(C++11)
分类
FP_NORMALFP_SUBNORMALFP_ZEROFP_INFINITEFP_NAN(C++11)(C++11)(C++11)(C++11)(C++11)
[编辑]
定义于头文件
定义于头文件
(1)
float abs( float num ); double abs( double num );
long double abs( long double num );
(直至 C++23)
constexpr /* 浮点类型 */ abs( /* 浮点类型 */ num );
(C++23 起)
定义于头文件
(2)
float fabs ( float num ); double fabs ( double num )
long double fabs ( long 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 起)
定义于头文件
template< class Integer >
double fabs ( Integer num );
(A)
(C++11 起) (C++23 起为 constexpr)
1-4) 计算浮点值 num 的绝对值。 库为所有 cv-非限定浮点类型提供了 std::abs 和 std::fabs 的重载,作为参数 num 的类型。(C++23 起)
A) 为所有整数类型提供了额外的重载,它们被视为 double。
(C++11 起)
对于整型参数,std::abs 的整型重载 可能是更好的匹配。如果调用 std::abs 时使用无法通过 整型提升 转换为 int 的无符号整型参数,则程序格式错误。
目录
1 参数
2 返回值
3 错误处理
4 注意
5 示例
6 缺陷报告
7 参阅
[编辑] 参数
num
-
浮点值或整数值
[编辑] 返回值
如果成功,返回 arg 的绝对值 (|arg|)。返回的值是精确的,不依赖于任何舍入模式。
[编辑] 错误处理
此函数不受 math_errhandling 中指定的任何错误条件的影响。
如果实现支持 IEEE 浮点运算 (IEC 60559),
如果参数是 ±0,则返回 +0。如果参数是 ±∞,则返回 +∞。如果参数是 NaN,则返回 NaN。
[编辑] 注意
不需要完全按照 (A) 提供额外的重载。它们只需要足以确保对于整型参数 num,std::fabs(num) 具有与 std::fabs(static_cast
[编辑] 示例
运行此代码
#include
#include
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++ 标准。
缺陷报告
应用于
发布时的行为
正确的行为
LWG 2192
C++98
std::abs 的重载在两个头文件中声明不一致
在两个头文件中都声明了这些重载
LWG 2735
C++11
对于整型,std::abs 的重载错误地要求返回 double
移除了此要求
[编辑] 参阅
abs(int)labsllabs(C++11)
计算整数值的绝对值 (\(\small{|x|}\)|x|) (函数) [编辑]
copysigncopysignfcopysignl(C++11)(C++11)(C++11)
复制浮点值的符号 (函数) [编辑]
signbit(C++11)
检查给定数字是否为负数 (函数) [编辑]
abs(std::complex)
返回复数的模 (函数模板) [编辑]
abs(std::valarray)
将函数 abs 应用于 valarray 的每个元素 (函数模板) [编辑]
C 文档 关于 fabs