abs , labs , llabs , _abs64
Функции abs , labs , llabs и _abs64 возвращают абсолютное значение параметра n . Ошибка не возвращается.
Комментарии
Так как C++ допускает перегрузку, можно вызывать перегрузки abs , которые принимают и возвращают значения long , long long , float , double и long double . Эти перегрузки определяются в заголовке . В программе abs C всегда принимает и возвращает . int
Для майкрософт. Диапазон отрицательных целых чисел, представленных в любом целочисленном типе, больше диапазона положительных целых чисел, представленных в этом типе. Таким образом, можно предоставить аргумент для этих функций, которые невозможно преобразовать. Если абсолютное значение аргумента не может быть представлено типом возвращаемого значения, abs функции возвращают значение аргумента без изменений. В частности abs(INT_MIN) возвращает INT_MIN , labs(LONG_MIN) возвращает LONG_MIN , llabs(LLONG_MIN) возвращает LLONG_MIN , а _abs64(_I64_MIN) возвращает _I64_MIN . abs Фактически функции нельзя использовать для обеспечения положительного значения.
Требования
Подпрограмма | Обязательный заголовок C | Обязательный заголовок C++ |
---|---|---|
abs , labs , llabs | или | , , или |
_abs64 | или |
Чтобы использовать перегруженные abs версии в C++, необходимо включить заголовок .
Пример
Эта программа вычисляет и отображает абсолютные значения несколько чисел.
// crt_abs.c // Build: cl /W3 /TC crt_abs.c // This program demonstrates the use of the abs function // by computing and displaying the absolute values of // several numbers. #include #include #include #include int main( void ) < int ix = -4; long lx = -41567L; long long llx = -9876543210LL; __int64 wx = -1; // absolute 32 bit integer value printf_s("The absolute value of %d is %d\n", ix, abs(ix)); // absolute long integer value printf_s("The absolute value of %ld is %ld\n", lx, labs(lx)); // absolute long long integer value printf_s("The absolute value of %lld is %lld\n", llx, llabs(llx)); // absolute 64 bit integer value printf_s("The absolute value of 0x%.16I64x is 0x%.16I64x\n", wx, _abs64(wx)); // Integer error cases: printf_s("Microsoft implementation-specific results:\n"); printf_s(" abs(INT_MIN) returns %d\n", abs(INT_MIN)); printf_s(" labs(LONG_MIN) returns %ld\n", labs(LONG_MIN)); printf_s(" llabs(LLONG_MIN) returns %lld\n", llabs(LLONG_MIN)); printf_s(" _abs64(_I64_MIN) returns 0x%.16I64x\n", _abs64(_I64_MIN)); >
The absolute value of -4 is 4 The absolute value of -41567 is 41567 The absolute value of -9876543210 is 9876543210 The absolute value of 0xffffffffffffffff is 0x0000000000000001 Microsoft implementation-specific results: abs(INT_MIN) returns -2147483648 labs(LONG_MIN) returns -2147483648 llabs(LLONG_MIN) returns -9223372036854775808 _abs64(_I64_MIN) returns 0x8000000000000000
Abs, Sqr в Pascal.
Abs — функция языка Паскаль, которая вычисляет модуль числа.
Sqr — функция языка Паcкаль, которая возводит число в квадрат.
program number8; uses crt; var A, B, C:integer; begin clrscr; A:= -2; B:=Abs (A); writeln('Abs(-2)=',B); C:=Sqr(B); writeln('Sqr(2)=',C); readln end.
Строка №7. Функция Abs вычисляет модуль числа, стоящего в скобках после функции. В данном случае вычисляется модуль переменной «A», которая имеет значение «-2». Так как модуль «|-2|» равен «2», то «2» и будет результатом операции Abs.
Строка №9. Функция Sqr возводит число, стоящее в скобках в квадрат. В данном случае в квадрат возводится переменная «B», т.е. число «2». Таким образом, результатом операции будет число «4».
Дополнение к материалу.
В примерах №6, 7, 8 мы использовали небольшие числа (-2, 3, 17 и т.д.). Для всех переменных, в которые эти числа записывались, мы указывали тип данных INTEGER. Следует сказать, что данный тип данных используется не для всех чисел, а только для целых, лежащих в диапазоне от – 32768 до 32767. И если мы будем использовать в наше программе числа, которые лежат вне этих пределов (например – 32987 или 36789), то мы должны использовать другой тип данных.
Диапазон значений для различных типов данных можно посмотреть в таблице.
Тип данных | Запись | Длина в байтах |
---|---|---|
integer | -32 768….32 767 | 2 |
byte | 0…255 | 1 |
word | 0…65 535 | 2 |
shortint | -128….127 | 1 |
longint | -2 147 483 648….2 147 483 647 | 4 |
Использование различных типов данных обусловлено тем, что для каждого из них выделяется определенное количество ячеек в памяти компьютера. Если мы используем в программе числа от 0 до 255, то наиболее целесообразно будет использовать тип данных BYTE. Хотя можно использовать и любой другой тип данных. Например, для числа 10 можно использовать и BYTE и LONGINT, но тогда в первом случае будет расходоваться 1 байт в памяти компьютера, а во втором — целых 4 байта. Учитывая то, что программа должна расходовать как можно меньше памяти, рационально будет использовать для данного примера тип данных BYTE.
Функция Abs в Паскале
Функция Abs в Паскале возвращает абсолютное значение переменной. Результат, возвращаемый функцией Abs, имеет тот же тип данных, что и аргумент — параметр, передаваемый в функцию. Этот параметр может иметь любой числовой тип данных.
Синтаксис функции Abs для целых чисел:
function Abs(L : LongInt) : LongInt;
function Abs(I : Int64) : Int64;
Последний вариант возможен только для FreePascal и Lazarus, так как в классическом Паскале нет типа данных Int64.
Синтаксис функции Abs для вещественных чисел:
function Abs(D : ValReal) : ValReal;
ValReal — это вещественный тип данных с наибольшим доступным значением в данной операционной системе. Фактически это псевдоним (алиас) одного из типов Extended или Double.
А теперь пример использования:
program absfunc; var x : integer = -100; y : integer; begin y := Abs(x); //у = 100 WriteLn('Abs(-100) = ', y); //Выведет 100 ReadLn; end.
Здесь мы сначала объявляем переменную с начальным значением равным -100 (отрицательное число).
А в программе используем функцию Abs и в результате переменная у будет равна 100 (положительное число).
Что вычисляет функция Abs
Вообще Abs — это сокращение от Absolute. Как нетрудно догадаться, переводится это слово как “абсолютный, чистый, несомненный”.
Вы должны помнить из школьного курса математики, что абсолютное число, то есть абсолютная величина или модуль числа х — это неотрицательное число, определение которого зависит от типа числа х.
В математике модуль числа х обозначается так: |x|.
То есть функция Abs в любом случае возвращает положительное число. Такая функция есть практически во всех языках программирования, так как используется довольно часто и входит в основы математики.
Таким образом, можно сказать, что функция Abs(х) вычисляет модуль числа х. То есть Abs(х) в Паскале — это то же самое, что |x| в математике.
Ну и напоследок давайте создадим свой собственный аналог функции, которая возвращает модуль числа. Итак, функция будет примерно такая:
function MyAbs(iNum : integer) : integer; begin if iNum < 0 then MyAbs := -1 * iNum else MyAbs := iNum; end;
Здесь мы передаём в функцию целое число, которое может быть как отрицательным, так и положительным. В функции мы проверяем значение этого числа. Если число отрицательное, то мы умножаем его на -1, и таким образом получаем положительное число. Если число положительное, то мы ничего не делаем - просто возвращаем полученное через параметр iNum число.
Как видите, алгоритм довольно простой.
Правда, наша функция может работать только с целыми числами. Но это уже мелочи.
При подготовке материала использовались источники:
https://learn.microsoft.com/ru-ru/cpp/c-runtime-library/reference/abs-labs-llabs-abs64?view=msvc-170
http://mojainformatika.ru/paskal/uroki-paskal/11-ispolzovanie-abs-sqr.html
https://info-master.su/programming/pascal-functions/abs.php