Spec-Zone.ru › C++

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)
1-4) Вычисляет абсолютное значение числа с плавающей точкой 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
требование удалено

См. также

abs(int)labsllabs
(C++11)
вычисляет абсолютное значение целого числа (\(\small{|x|}\)|x|)
(функция)
copysigncopysignfcopysignl
(C++11)(C++11)(C++11)
копирует знак числа с плавающей точкой
(функция)
signbit
(C++11)
проверяет, является ли заданное число отрицательным
(функция)
abs(std::complex)
возвращает модуль комплексного числа
(шаблон функции)
abs(std::valarray)
применяет функцию 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API