Spec-Zone.ru › C++

std::abs, std::labs, std::llabs, std::imaxabs

Определено в заголовочном файле <cstdlib>
Определено в заголовочном файле <cmath>
int       abs( int num );
(1) (constexpr начиная с C++23)
long      abs( long num );
(2) (constexpr начиная с C++23)
long long abs( long long num );
(3) (начиная с C++11)
(constexpr начиная с C++23)
Определено в заголовочном файле <cstdlib>
long       labs( long num );
(4) (constexpr начиная с C++23)
long long llabs( long long num );
(5) (начиная с C++11)
(constexpr начиная с C++23)
Определено в заголовочном файле <cinttypes>
std::intmax_t abs( std::intmax_t num );
(6) (начиная с C++11)
(constexpr начиная с C++23)
std::intmax_t imaxabs( std::intmax_t num );
(7) (начиная с C++11)
(constexpr начиная с C++23)

Вычисляет абсолютное значение целого числа num. Поведение не определено, если результат не может быть представлен возвращаемым типом.

Если std::abs вызывается с аргументом беззнакового целочисленного типа, который нельзя преобразовать в int посредством целочисленного продвижения, программа некорректна.

Перегрузка (6) std::abs для std::intmax_t предоставляется в <cinttypes> тогда и только тогда, когда std::intmax_t является расширенным целочисленным типом.

(начиная с C++11)

Параметры

num - целочисленное значение

Возвращаемое значение

Абсолютное значение num (то есть |num|), если оно представимо.

Примечания

В системах с дополнительным кодом абсолютное значение наименьшего отрицательного значения выходит за пределы диапазона; например, для 32-битного типа int с дополнительным кодом INT_MIN равно -2147483648, но предполагаемый результат 2147483648 больше INT_MAX, которое равно 2147483647.

Пример

#include <climits>
#include <cstdlib>
#include <iostream>

int main()
{
    std::cout << std::showpos
              << "abs(+3) = " << std::abs(3) << '\n'
              << "abs(-3) = " << std::abs(-3) << '\n';
    
//  std::cout << std::abs(INT_MIN); // undefined behavior on 2's complement systems
}

Вывод:

abs(+3) = +3
abs(-3) = +3

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

DR Применяется к Опубликованное поведение Корректное поведение
LWG 2192 C++98 перегрузки std::abs были
непоследовательно объявлены в двух заголовочных файлах
эти перегрузки объявлены
в обоих заголовочных файлах

См. также

abs(float)fabsfabsffabsl
(C++11)(C++11)
абсолютное значение числа с плавающей точкой (\(\small{|x|}\)|x|)
(функция)
abs(std::complex)
возвращает модуль комплексного числа
(шаблон функции)
abs(std::valarray)
применяет функцию abs к каждому элементу valarray
(шаблон функции)
Документация C для abs, labs, llabs

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/abs

Spec-Zone.ru

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