exp в C/C++: вычисляем экспоненту
👋 Привет! В этой статье мы поговорим о функции exp
. Эта функция позволяет нам вычислить экспоненту числа в C/C++. Сначала мы посмотрим как использовать эту функцию на примере, а потом попробуем реализовать ее сами. Также мы разберемся чем отли чается exp
от expl
и expf
. В конце статьи вы найдете упражнения для закрепления материала.
Как получить экспоненту числа в C/C++
Для того, чтобы вычислить экспоненту числа в C/C++, мы можем воспользоваться встроенной функцией exp
. Эта функция доступна нам после подключения файла <math.h>
. В C++ можно подключить <cmath>
. Вот как выглядит прототип этой функции:
double exp (double x);
- Единственным аргументом функция принимает число, для которого нужно вычислить экспоненту.
- Функция возвращает экспоненту переданного ей аргумента.
Давайте посмотрим на пример:
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout << "exp(1) = " << exp(1) << endl;
cout << "exp(2) = " << exp(2) << endl;
cout << "exp(10) = " << exp(10) << endl;
cout << "exp(0) = " << exp(0) << endl;
cout << "exp(0.25) = " << exp(0.25) << endl;
cout << "exp(-2) = " << exp(-2) << endl;
cout << "exp(-4.567) = " << exp(-4.567) << endl;
return 0;
}
Вывод программы:
exp(1) = 2.71828
exp(2) = 7.38906
exp(10) = 22026.5
exp(0) = 1
exp(0.25) = 1.28403
exp(-2) = 0.135335
exp(-4.567) = 0.0103891
Какое значение будет выведено на экран после выполнения следующего кода?
#include <cmath>
#include <iostream>
using namespace std;
int main() {
double x = 2.5;
cout << exp(x + 1) / exp(x) << endl;
return 0;
}
Как реализовать exp самому
Для вычисления экспоненты самостоятельно мы воспользуемся рядом Тейлора. Экспонента разложенная в ряд Тейлора имеет следующий вид:
Программа:
#include <cmath>
#include <iostream>
using namespace std;
// Функция для вычисления факториала числа
double factorial(int n) {
if (n == 0) return 1.0;
double result = 1.0;
for (int i = 1; i <= n; ++i) {
result *= i;
}
return result;
}
// Функция для вычисления e^x с использованием ряда Тейлора
double my_exp(double x, int num_terms = 20) {
double result = 1.0; // Начнем с первого члена ряда Тейлора (1)
for (int n = 1; n <= num_terms; ++n) {
result += pow(x, n) / factorial(n);
}
return result;
}
int main() {
cout << "my_exp(1) = " << my_exp(1) << endl;
cout << "my_exp(2) = " << my_exp(2) << endl;
cout << "my_exp(10) = " << my_exp(10) << endl;
cout << "my_exp(0) = " << my_exp(0) << endl;
cout << "my_exp(0.25) = " << my_exp(0.25) << endl;
cout << "my_exp(-2) = " << my_exp(-2) << endl;
cout << "my_exp(-4.567) = " << my_exp(-4.567) << endl;
return 0;
}
Вывод:
my_exp(1) = 2.71828
my_exp(2) = 7.38906
my_exp(10) = 21991.5
my_exp(0) = 1
my_exp(0.25) = 1.28403
my_exp(-2) = 0.135335
my_exp(-4.567) = 0.0103902
В программе выше мы вычисляем двадцать элементов ряда. Количество итераций можно изменить как в большую, так и в меньшую сторону, передав второй аргумент num_terms
(по умолчанию двадцать). Все зависит от того, какая точность вам нужна.
Функции expl и expf
Функции expl
и expf
, как и exp
, вычисляют экспоненту числа. Разница только в том, что они работают с вещественными числами long double
(expl
) и float
(expf
). Давайте посмотрим на пример:
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout << "expl(234) = " << expl(234) << endl;
cout << "exp (234) = " << exp(234) << endl;
cout << "expf(234) = " << expf(234) << endl;
return 0;
}
Вывод:
expl(234) = 4.21608e+101
exp (234) = 4.21608e+101
expf(234) = inf
Как вы можете видеть, они возвращают одно и то же число, просто другого типа. В случае с expf
, число переполнилось и мы получили inf
.
Упражнения
-
Использование
exp
,expl
иexpf
:
Напишите программу на C++, которая запрашивает у пользователя число и тип числа (double
,long double
,float
), затем вычисляет экспоненту этого числа используя соответствующую функцию (exp
,expl
,expf
) и выводит результат. Ваша программа должна также выводить исходное число пользователя. -
Сравнение
exp
иmy_exp
:
Используя предоставленный в статье пример, сравните результаты работы стандартной функцииexp
и вашей версии функцииmy_exp
для различных чисел. Напишите программу, которая демонстрирует различия в результатах и выводит их на экран. -
Использование
expf
с большими числами:
Напишите программу, которая демонстрирует переполнение при использовании функцииexpf
с большими числами. В вашей программе должны быть использованы функцииexp
,expl
, иexpf
, и результаты их работы должны выводиться на экран.
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение