Функция fabs в C++: модуль числа

Привет! С помощью функции fabs можно получить модуль вещественного числа. В данной статье мы разберемся как данная функция работает на примерах, а также сделаем свою версию данной функции.

Как работает fabs

fabs является частью cmath. Данная функция принимает вещественное число и возвращает его модуль. Модуль числа равен самому числу, если оно больше нуля, и равен числу, умноженному на -1, если оно меньше нуля. Результат функции fabs можно видеть на графике ниже:

график функции fabs

Данный график можно представить формулой: fabs(x) = |x|

Теперь давайте попробуем воспользоваться данной функцией:

#include <iostream>
#include <cmath>

int main() {
    std::cout << "fabs(10.5) = " << std::fabs(10.5) << std::endl;
    std::cout << "fabs(-10.5) = " << std::fabs(-10.5) << std::endl;
    std::cout << "fabs(0) = " << std::fabs(0) << std::endl;

    return 0;
}

fabs также доступна при использовании заголовочного файла math.h. Однако для новых программ рекомендуется использовать cmath, поскольку math.h считается устаревшим.

Результат работы программы:

fabs(10.5) = 10.5
fabs(-10.5) = 10.5
fabs(0) = 0

Как реализовать fabs самому

Чтобы лучше понять fabs, давайте реализуем данную функцию сами:

#include <iostream>

float fabs(float x) {
    if (x < 0) {
        return -x;
    }

    return x;
}

int main() {
    std::cout << "fabs(10.5) = " << fabs(10.5) << std::endl;
    std::cout << "fabs(-10.5) = " << fabs(-10.5) << std::endl;
    std::cout << "fabs(0) = " << fabs(0) << std::endl;

    return 0;
}

Стоит отметить, что версия fabs, которая находится в стандартной библиотеке C++, будет работать быстрее, поскольку оптимизирована на уровне байт-кода.

Результат работы программы:

fabs(10.5) = 10.5
fabs(-10.5) = 10.5
fabs(0) = 0

Как видите, наша функция fabs работает аналогично стандартной функции в C++.

Отличие std::fabs от abs

У функции std::fabs есть аналог для целых чисел - abs. Разница у них лишь в том, что std::fabs работает с дробными числами, в то время как abs работает только с целыми. Таким образом, если вам требуется модуль вещественного числа, используйте std::fabs. Для целых чисел применяйте abs.

abs остался со времен C и доступен без подключения cmath или math.h.

Есть еще labs, который работает с long числами (abs принимает и возвращает int). Постарайтесь не запутаться в следующий раз, когда будите выбирать нужную версию данной функции 🙂.

Что будет выведено на экран:

cout << labs(-7.25) << endl;
7.25
-7.25
7
-7

Упражнения

  1. Применение fabs:
    Напишите программу на C++, которая запрашивает у пользователя вещественное число, применяет к нему функцию fabs и выводит результат. Ваша программа должна также выводить исходное число пользователя.
  2. Создание своей версии fabs для double:
    Используя предоставленный в статье пример, создайте свою версию функции fabs, но для чисел типа double. Проверьте ее работу, используя различные числа.
  3. Сравнение fabs и abs:
    Напишите программу, которая демонстрирует различия между fabs и abs. В вашей программе должны быть использованы обе функции, и результаты их работы должны выводиться на экран.

Обсуждение