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) |
longlong abs(longlong num ); | (3) | (начиная с C++11) (constexpr начиная с C++23) |
Определено в заголовочном файле <cstdlib> | ||
long labs(long num ); | (4) | (constexpr since C++23) |
longlong llabs(longlong num ); | (5) | (начиная с C++11) (constexpr начиная с C++23) |
Определено в заголовочном файле <cinttypes> | ||
std::intmax_t abs(std::intmax_t num ); | (6) | (начиная с C++11) (constexpr since C++23) |
std::intmax_t imaxabs(std::intmax_t num ); | (7) | (начиная с C++11) (constexpr since C++23) |
Вычисляет абсолютное значение целого числа num. Поведение не определено, если результат не может быть представлен возвращаемым типом.
Если std::abs
вызывается с целочисленным аргументом без знака, который нельзя преобразовать в int путём целочисленного преобразования, программа некорректна.
Перегрузка (6) | (начиная с C++11) |
Содержание |
[править]Параметры
num | — | целочисленное значение |
[править]Возвращаемое значение
Абсолютное значение num (т.е. |num|
), если оно представимо.
[править]Примечание
В системах с дополнением до 2 абсолютное значение самого отрицательного значения выходит за пределы допустимого диапазона, например, для 32-битного типа int с дополнением до 2, 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); // неопределённое поведение в системах// с дополнением до 2}
Вывод:
abs(+3) = +3 abs(-3) = +3
[править]Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 2192 | C++98 | перегрузки std::abs были несогласованно объявленыв двух заголовках | эти перегрузки объявлены в обоих заголовках |
[править]Смотрите также
(C++11)(C++11) | абсолютное значение числа с плавающей запятой (|x|) (функция) |
возвращает величину комплексного числа (шаблон функции) | |
применяет функцию abs к каждому элементу valarray (шаблон функции) | |
Документация C по abs, labs, llabs |