2

我试图找到 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;
} 
4

1 回答 1

6

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

于 2013-05-07T13:07:11.717 回答