cpp/numeric/math/fabs:修订间差异

来自cppreference.com
Fruderica留言 | 贡献
无编辑摘要
Fruderica留言 | 贡献
abandon cmath_fl
第17行: 第17行:
|until1=|dcl1=
|until1=|dcl1=
float      fabs ( float arg );
float      fabs ( float arg );
|since2={{cmath fl}}|dcl2=
|since2=|dcl2=
float      fabsf( float arg );
float      fabsf( float arg );
}}
}}
第26行: 第26行:
|until1=|dcl1=
|until1=|dcl1=
long double fabs ( long double arg );
long double fabs ( long double arg );
|since2={{cmath fl}}|dcl2=
|since2=|dcl2=
long double fabsl( long double arg );
long double fabsl( long double arg );
}}
}}
第35行: 第35行:


@1-6@计算浮点值 {{tt|arg}} 的绝对值。
@1-6@计算浮点值 {{tt|arg}} 的绝对值。
@7@任何 {{v|4-6}} 所不覆盖的[[cpp/types/is_arithmetic|算术类型]]参数组合的重载集或函数模板。若任何参数拥有[[cpp/types/is_integral|整数类型]],则将它转型为 {{c|double}} 。若任何参数为 {{c|long double}} ,则返回类为 {{c|long double}} ,否则为 {{c|double}} 。
@7@任何[[cpp/types/|类型]]参数的重载集或函数模板。{{|}} 参数型为 {{c|double}} 。


{{rrev | since=c++17 |对于整数参数, [[cpp/numeric/math/abs|{{tt|std::abs}} 的整数重载]]更可能是较好的匹配。若以满足 {{c|std::is_unsigned_v<X>}} 为 {{tt|true}} 的 {{tt|X}} 类型参数调用 {{tt|std::abs}} ,而[[cpp/language/implicit_conversion#整数类型提升|整数提升]]不能将 {{tt|X}} 转换为 {{c|int}} ,则程序为病式。}}
{{rrev | since=c++17 |对于整数参数, [[cpp/numeric/math/abs|{{tt|std::abs}} 的整数重载]]更可能是较好的匹配。若以满足 {{c|std::<X>}} 为 {{tt|true}} 的 {{tt|X}} 类型参数调用 {{tt|std::abs}} ,而[[cpp/language/implicit_conversion#整数类型提升|整数提升]]不能将 {{tt|X}} 转换为 {{c|int}} ,则程序为病式。}}


===参数===
===参数===
第48行: 第48行:


===错误处理===
===错误处理===
此函数不受制于任何指定于 {{ltt|cpp/numeric/math/math_errhandling}} 的错误条件。
此函数不受制于任何指定于 {{|math_errhandling}} 的错误条件。


若实现支持 IEEE 浮点算术( IEC 60559 ),则
若实现支持 IEEE 浮点算术( IEC 60559 ),则
第54行: 第54行:
* 若参数为 ±∞ ,则返回 +∞
* 若参数为 ±∞ ,则返回 +∞
* 若参数为 NaN ,则返回 NaN
* 若参数为 NaN ,则返回 NaN
===注意===
C++11 与 C++14 间,标准错误地要求 {{tt|std::abs}} 拥有对整数类型返回 {{c|double}} 的重载。这被[http://wg21.link/lwg2735 缺陷报告 2735] 于 C++17 移除。


===示例===
===示例===
第79行: 第76行:
abs(-Inf) = inf
abs(-Inf) = inf
}}
}}


===参阅===
===参阅===

2018年12月3日 (一) 07:33的版本

 
 
 
常用数学函数
函数
基础运算
(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++26)(C++26)(C++26)

 
在标头 <cmath> 定义
在标头 <cstdlib> 定义
(C++17 起)
float       abs( float arg );
(1)
double      abs( double arg );
(2)
long double abs( long double arg );
(3)
在标头 <cmath> 定义
float       fabs ( float arg );
(4)
float       fabsf( float arg );
(C++17 起)
double      fabs ( double arg );
(5)
long double fabs ( long double arg );
(6)
long double fabsl( long double arg );
(C++17 起)
double      fabs ( IntegralType arg );
(7) (C++11 起)
1-6) 计算浮点值 arg 的绝对值。
7) 接受任何整数类型参数的重载集或函数模板。等价于 (5) (将参数转型为 double )。

对于整数参数, std::abs 的整数重载更可能是较好的匹配。若以满足 std::is_unsigned<X>::valuetrueX 类型参数调用 std::abs ,而整数提升不能将 X 转换为 int ,则程序为病式。

(C++17 起)

参数

arg - 浮点或整数类型

返回值

若成功,则返回 arg 的绝对值( |arg| )。值是准确的,且不依赖任何舍入模式。

错误处理

此函数不受制于任何指定于 math_errhandling 的错误条件。

若实现支持 IEEE 浮点算术( IEC 60559 ),则

  • 若参数为 ±0 ,则返回 +0
  • 若参数为 ±∞ ,则返回 +∞
  • 若参数为 NaN ,则返回 NaN

示例

#include <iostream>
#include <cmath>

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(+3.0) = 3
abs(-3.0) = 3
abs(-0.0) = 0
abs(-Inf) = inf

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2735 C++11 错误地要求了 std::abs 有对整数类型返回 double 的重载 移除该要求

参阅

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