命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本操作
abs(float)fabs
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指数函数
(C++11)
(C++11)

(C++11)
(C++11)
幂函数
(C++11)
(C++11)
三角
双曲函数
(C++11)
(C++11)
(C++11)

误差和伽马函数
(C++11)
(C++11)
(C++11)
(C++11)
最接近整数浮点运算
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮点操作函数
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分类和比较
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型
(C++11)
(C++11)
(C++11)
宏常量
分类
(C++11)(C++11)(C++11)(C++11)(C++11)


 
定义在头文件中 <cmath>
定义在头文件中 <cstdlib>
(1)
float       abs( float num );

double      abs( double num );

long double abs( long double num );
(直到 C++23)
constexpr /* 浮点类型 */
            abs( /* 浮点类型 */ num );
(自 C++23)
定义在头文件中 <cmath>
(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)
定义在头文件中 <cmath>
template< class Integer >
double      fabs ( Integer num );
(A) (自 C++11)
(自 C++23 起为 constexpr)
1-4) 计算浮点值 num 的绝对值。 库为所有 cv 非限定浮点类型提供了 std::absstd::fabs 的重载,作为参数 num 的类型。 (自 C++23)
A) 为所有整数类型提供了其他重载,这些类型被视为 double
(自 C++11)

对于整数参数,std::abs 的整数重载 可能是更好的匹配。如果 std::abs 使用不能通过 整数提升 转换为 int 的无符号整数参数调用,则程序将是非法的。

内容

[编辑] 参数

num - 浮点或整数值

[编辑] 返回值

如果成功,则返回 arg 的绝对值 (|arg|)。返回的值是精确的,不依赖于任何舍入模式。

[编辑] 错误处理

此函数不受 math_errhandling 中指定的任何错误条件的影响。

如果实现支持 IEEE 浮点运算 (IEC 60559),

  • 如果参数是 ±0,则返回 +0。
  • 如果参数是 ±∞,则返回 +∞。
  • 如果参数是 NaN,则返回 NaN。

[编辑] 注意

其他重载不需要完全按照 (A) 提供。它们只需要足够保证对于整数类型的参数 numstd::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
删除了该要求

[编辑] 另见

计算整数值的绝对值 (|x|)
(函数) [编辑]
(C++11)(C++11)(C++11)
复制浮点值的符号
(函数) [编辑]
(C++11)
检查给定数字是否为负
(函数) [编辑]
返回复数的模
(函数模板) [编辑]
将函数 abs 应用于 valarray 的每个元素
(函数模板) [编辑]
C 文档 for fabs