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)
 
在标头 <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 限定的浮点类型作为参数 num 的类型的 std::absstd::fabs 重载。 (C++23 起)
A) 为所有整数类型提供额外重载,将它们当做 double
(C++11 起)

对于整数参数,std::abs 的整数重载通常是更好的匹配。如果以不能由整数提升转换成 int 的无符号整型参数调用 std::abs,那么程序非良构。

参数

arg - 浮点或整数值

返回值

在成功时返回 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';
 
    // 特殊值
    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 的重载 移除该要求

参阅

计算整数值的绝对值(|x|
(函数)
(C++11)(C++11)(C++11)
复制浮点值的符号
(函数)
(C++11)
检查给定数是否为负
(函数)
返回复数的模
(函数模板)
应用函数 std::abs 到 valarray 的每个元素
(函数模板)