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|), если оно представимо.

Примечания

В системах со знаком «дополнение до 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 были
несогласованно объявлены в двух заголовках
эти перегрузки
были объявлены
в обоих заголовках

См. также

abs(float)fabsfabsffabsl
(C++11)(C++11)
абсолютное значение плавающей точки (\(\small{|x|}\)|x|)
(функция)
abs(std::complex)
возвращает модуль комплексного числа
(шаблон функции)
abs(std::valarray)
применяет функцию 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

Spec-Zone.ru

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