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) | (начиная с 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 былинепоследовательно объявлены в двух заголовочных файлах | эти перегрузки объявлены в обоих заголовочных файлах |
См. также
|
(C++11)(C++11) | абсолютное значение числа с плавающей точкой (\(\small{|x|}\)|x|) (функция) |
| возвращает модуль комплексного числа (шаблон функции) |
|
применяет функцию 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