cpp/numeric/math/fabs:修订间差异
来自cppreference.com
无编辑摘要 |
小无编辑摘要 |
||
| 第33行: | 第33行: | ||
{{dcl end}} | {{dcl end}} | ||
@1-4@ 计算浮点值 {{c|num}} 的绝对值。{{rev inl|since=c++23|标准库提供所有以无 cv 限定的浮点类型作为参数 {{c|num}} 类型的重载。}} | @1-4@ 计算浮点值 {{c|num}} 的绝对值。{{rev inl|since=c++23|标准库提供所有以无 cv 限定的浮点类型作为参数 {{c|num}} 类型的 重载。}} | ||
{{rrev|since=c++11| | {{rrev|since=c++11| | ||
2023年3月13日 (一) 09:21的版本
| 在标头 <cmath> 定义
|
||
| 在标头 <cstdlib> 定义
|
||
| (1) | (C++23 前) | |
| (C++23 起) | ||
| 在标头 <cmath> 定义
|
||
| (2) | (C++23 前) | |
| (C++23 起) | ||
| |
(3) | (C++11 起) (C++23 起 constexpr) |
| |
(4) | (C++11 起) (C++23 起 constexpr) |
| 额外重载 (C++11 起) |
||
| 在标头 <cmath> 定义
|
||
| |
(A) | (C++11 起) (C++23 起 constexpr) |
1-4) 计算浮点值
num 的绝对值。标准库提供所有以无 cv 限定的浮点类型作为参数 num 类型的 std::abs 和 std::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 的重载
|
移除该要求 |
参阅
(C++11) |
计算整数的绝对值(|x|) (函数) |
(C++11)(C++11)(C++11) |
复制浮点数的符号 (函数) |
(C++11) |
检查给定数是否为负 (函数) |
| 返回复数的模 (函数模板) | |
应用函数 abs 到 valarray 的每个元素 (函数模板) | |
fabs 的 C 文档
| |