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|), если оно представимо.
Примечания
В системах со знаком «дополнение до 2», абсолютное значение наименьшего отрицательного значения выходит за пределы диапазона, например, для 32-битного типа со знаком «дополнение до 2» 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 к каждому элементу массива (шаблон функции) |
|
C документация для abs, labs, llabs |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/abs