@avion123678

Ошибка в c++ нахождения e^x?

Данный код находит e^x по формуле e^x = 1 + x + (x^2) / 2! + (x^3) / 3! и выполняется до того, пока слагаемое не станет меньше 10^(-6):
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

//Функция нахождения факториал
double fl(int num) {
 int fl = 1;
 while (num) {
  fl *= num;
  num --;
 }
 return fl;
}

int main()
{
 setlocale(LC_CTYPE, "rus");

 double x, e, a = 1;
 int st = 2;

 cout << "input: ";
 cin >> x;
 e = 1 + x;

 while (a >= 10e-6)
  {
  a = pow(x, st) / fl(st);
  e += a;
  st++;
 }

 cout << "e^x: " << e;

 system("pause>nul");

 return 0;
}


На вывод при x = 2.1 выводит верный ответ, но при x > 2.1, откуда появляется отрицательное число. В чем может быть проблема?
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
num —; - Это что за оператор?
Ну, собственно, из всех вариантов расчёта вы выбрали самый неэффективный.
Такие задачи решаются с помощью индукции. Необходимо выразить следующий член ряда через предыдущий. В данном случае
yi = yi-1 * x / i
y0 = 1
Соответственно, цикл будет
res = 0;
y = 1;
i = 0;
do {
  res += y;
  y *= x / (++i);
} while (fabs(y) > 10e-6);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы