Я пытаюсь найти е к власти х. Пожалуйста, укажите, что может быть не так с моей текущей реализацией, вместо того, чтобы просто предлагать новые / более эффективные решения (я мог найти много в сети). Кажется, есть логическая ошибка или ошибка времени выполнения, отладка ничего не показывает. Заранее спасибо!
библиотека cmath включена, программа компилируется нормально .. останавливается при запуске
double find_e_power_x(int x){
int i = 1, j = 1, count = 1, accuracy = 15;
double xd = static_cast<double>(x); //pow takes double args
double jd = static_cast<double>(j);
double epx = 1.0;
while ( count < accuracy ){
while ( ++i && ++j) {
epx += ( pow(xd,jd) / fact(i) ); //static_cast
count++;
}
}
return epx;
}
В ответ на комментарии (указывая на мой бесконечный внутренний цикл),
РЕДАКТИРОВАТЬ:
while ( count < accuracy ){
epx += ( pow(xd,jd) / fact(i) ); //static_cast
count++;
i++;
j++;
}
вход = 3 ответ неправильный, хотя он выдает результат как 3.15485
ниже Окончательный вариант работает отлично
я / р = 4
о / р = 54,8278
double find_e_power_x(int x){
int i = 1, count = 1, accuracy = 15;
double xd = static_cast<double>(x); //pow takes double args
double id = static_cast<double>(i);
double epx = 1.0;
while ( count < accuracy ){
epx += ( pow(xd,id) / fact(i) ); //static_cast
++count;
++id;
++i;
}
return epx;
}
Вы увеличиваете j
каждый раз вокруг вашей петли, но не jd
, Поэтому ваше выражение:
epx += ( pow(xd,jd) / fact(i) ); //static_cast
эффективно:
epx += ( pow(xd, 1.0) / fact(i) ); //static_cast
каждый раз.
Переместить эту строку:
double jd = static_cast<double>(j);
внутри вашей петли или просто увеличить jd
непосредственно.
Других решений пока нет …