命名空间
变体
操作

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

来自 cppreference.cn
< 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 /* floating-point-type */
            abs( /* floating-point-type */ num );
(自 C++23 起)
定义于头文件 <cmath>
(2)
float       fabs ( float num );

double      fabs ( double num );

long double fabs ( long 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::absstd::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) 提供额外的重载。它们只需要足以确保对于整数类型的参数 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