std::abs(float), std::fabs, std::fabsf, std::fabsl
Определён в заголовочном файле <cmath> | ||
|---|---|---|
Определён в заголовочном файле <cstdlib> | ||
float abs( float num ); double abs( double num ); long double abs( long double num ); | (1) | (до C++23) |
constexpr /* floating-point-type */
abs( /* floating-point-type */ num );
| (начиная с C++23) | |
Определён в заголовочном файле <cmath> | ||
float fabs ( float num ); double fabs ( double num ); long double fabs ( long double num ); | (2) | (до 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) |
num. Библиотека предоставляет перегрузки std::abs и std::fabs для всех типов с плавающей точкой без cv-квалификаторов в качестве типа параметра 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). Они должны лишь обеспечивать, чтобы для аргумента 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';
// 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 | требование удалено |
См. также
|
(C++11) | вычисляет абсолютное значение целого числа (\(\small{|x|}\)|x|) (функция) |
|
(C++11)(C++11)(C++11) | копирует знак числа с плавающей точкой (функция) |
|
(C++11) | проверяет, является ли заданное число отрицательным (функция) |
| возвращает модуль комплексного числа (шаблон функции) |
|
применяет функцию abs к каждому элементу valarray (шаблон функции) |
|
Документация по C для fabs |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/fabs