e в степени x в C

Я пытаюсь найти e в степени x. Пожалуйста, укажите, что может быть не так с моей текущей реализацией, а не просто предлагайте новые/эффективные решения (я могу найти много в сети). Кажется, есть логическая ошибка или ошибка времени выполнения, отладка ничего не показывает. Заранее спасибо!

включена библиотека 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++;
     }

input =3 ответ неверный, хотя он дает результат как 3.15485


ниже окончательная версия работает нормально

i/p = 4

o/p = 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;
} 

person ShivaniDhanked    schedule 07.05.2013    source источник
comment
Не могли бы вы привести некоторые примеры входных и выходных данных, а также то, что вы ожидаете?   -  person Joseph Mansfield    schedule 07.05.2013
comment
Какие ошибки вы получаете?   -  person JBL    schedule 07.05.2013
comment
Кроме того, когда вы ожидаете, что внутренний цикл закончится?   -  person Joseph Mansfield    schedule 07.05.2013
comment
Да, на самом деле эта программа не останавливается, она просто не завершается.   -  person JBL    schedule 07.05.2013
comment
@шивани. если вам не нужен внутренний цикл. отредактируйте свой вопрос.   -  person Suvarna Pattayil    schedule 07.05.2013
comment
Эээ, разве это не обеспечивается функцией exp() в cmath?   -  person paxdiablo    schedule 07.05.2013
comment
@paxdiablo. Может, она просто что-то практикует. Использование pow и т. д.   -  person Suvarna Pattayil    schedule 07.05.2013
comment
Вы можете проверить этот вопрос и его первый ответ: > stackoverflow.com/questions/827706/   -  person Baltasarq    schedule 07.05.2013
comment
По иронии судьбы, pow вполне может звонить самому exp.   -  person Mike Seymour    schedule 07.05.2013


Ответы (1)


Вы увеличиваете 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 напрямую.

person ChrisF    schedule 07.05.2013
comment
да, спасибо, только что увидел ваш ответ, опубликовавший мою правку. уже понял. спасибо, все равно много. - person ShivaniDhanked; 07.05.2013