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-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение