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 since 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 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
|