log в C++: натуральный логарифм с примерами

Всем привет! В данной статье речь пойдет о функции log из файла <cmath>. Данная функция позволяет нам получить натуральный логарифм числа. Мы разберемся как работать с данной функцией, а также ее отличия от других похожих функций - logl и logf. В конце данного урока есть упражнения, которые помогут вам закрепить изученный материал.

Иллюстрация функции log

Как получить натуральный логарифм числа в C++

Для того, чтобы получить натуральный логарифм числа в C++ мы можем воспользоваться функцией log из файла <cmath>. Ее сигнатура выглядит следующим образом:

double log (double x);

Данная функция принимает только один аргумент - число, для которого нужно вычислить логарифм. Функция возвращает результат в виде числа типа double.

Давайте попробуем вызвать данную функцию с разными x, чтобы увидеть, как она работает:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
  cout << "log(10) = " << log(10) << endl;
  cout << "log(exp(3.5)) = " << log(exp(3.5)) << endl;
  cout << "log(-34) = " << log(-34) << endl;
  cout << "log(0) = " << log(0) << endl;

  return 0;
}

Вывод данной программы:

log(10) = 2.30259
log(exp(3.5)) = 3.5
log(-34) = nan
log(0) = -inf

Теперь давайте подробнее рассмотрим пример:

  1. Строка 7: здесь все просто, мы вычисляем логарифм числа 10. log(10) = 2.30259.
  2. Строка 8: тут уже интереснее. Мы сначала получаем экспоненту числа 3.5 при помощи функции exp. Поскольку функция log является обратной по отношению к exp, результат равен числу, которое мы передали в exp.
  3. Строка 9: здесь мы попытались получить логарифм отрицательного числа. Однако невозможно взять логарифм от числа со знаком минус, поэтому log вернул нам nan (Not a Number).
  4. Строка 10: тут мы пробуем взять логарифм нуля. Это уже можно сделать, однако результатом является минус бесконечность.

Как видите, используя встроенные функции C++, вычислить натуральный логарифм совсем не сложно. Если же вам нужен логарифм на основании 10, то можно воспользоваться функцией log10.

Рассмотрите следующий код на C++:

cout << log(exp(2.2)) << endl;

Какой результат будет выведен на экран?

2
0.84837
0
1.84837
2.2
-2.2

logf и logl

Функции logf и logl являются аналогами функции log с той лишь разницей, что они возвращают float и long double соответственно. Их вы можете использовать в том случае, если по каким-то причинам числа double вам не подходят.

Давайте рассмотрим пример использования logf и logl:

long double ld = logl(123);
float lf = logf(123);

cout << "ld = " << ld << endl;
cout << "lf = " << lf << endl;

Вывод:

ld = 4.81218
lf = 4.81218

Как видите, logf и logl дают одинаковый результат для одного и того же аргумента. Меняется только тип чисел, которые мы получаем.

Упражнения

  1. Основы log в C++:
    Напишите программу, которая запрашивает у пользователя вещественное число и вычисляет его натуральный логарифм при помощи функции log. Ваша программа должна выводить исходное число пользователя и его натуральный логарифм.

  2. Исследование значений log:
    Напишите программу, которая демонстрирует результаты функции log для разных значений: положительное число, отрицательное число, ноль и результат функции exp. Дополнительно, программа должна выводить комментарий к каждому результату на основе его значения (например, “Невозможно взять логарифм от отрицательного числа” для nan).

  3. Сравнение log, logf и logl:
    Напишите программу, которая использует функции log, logf и logl для одного и того же числа. Выведите результаты всех трех функций, чтобы показать различия в возвращаемых значениях или их отсутствие. Обратите внимание на тип каждого возвращаемого значения.

Обсуждение