Условие:
Вычислите с точностью [latex]\varepsilon[/latex] значение функции [latex]f(x)=e^x[/latex]. При вычислениях допустимо использовать только арифметические операции.
Входные данные:
В единственной строке указаны два числа, разделенные пробелом: аргумент функции [latex]x[/latex] и точность [latex]\varepsilon[/latex].
Тесты:
Входные данные | Выходные данные | |
[latex]x[/latex] | [latex]\varepsilon[/latex] | Результат |
1 | 0.1 | 2.70833 |
1 | 0.001 | 2.71825 |
12 | 0.072 | 2.4155e+07 |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <cmath> using namespace std; int main() { double x, e; cin>>x>>e; double result=1; double component=1; for (int i=1; abs(component)>=e; i++) { component*=(x/i); result+=component; } cout<<result<<endl; return 0; } |
Описание решения:
Для нахождения значения функции [latex]f(x)=e^x[/latex] (экспоненты) с точностью [latex]\varepsilon[/latex] воспользуемся формулой разложения Тейлора: [latex]f(x)=e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdots =\sum_{n=0}^{x^n}, x\in \mathbb{C}[/latex]. Запишем рекуррентное соотношение для нахождения каждого последующего члена: [latex]x_{n}=x_{n-1}\cdot\frac{x}{n}[/latex].Для нахождения искомого результата, будем прибавлять к значению [latex]result[/latex] новые члены до тех пор, пока они по модулю не станут меньше, чем [latex]\varepsilon[/latex].
Ссылка на код.