用于计算e ^ x的C ++程序

时间:2015-09-26 04:36:51

标签: c++ math

我知道有很多这个问题的例子,但我试着自己写一个不同的问题。 这是使用泰勒系列e ^ x = 1 + x / 1! + x ^ 2/2! + x ^ 3/3! + ...... 我的代码编译并运行,但它不会输出正确的答案,我不知道为什么。这是甚至可用的代码还是应该废弃它?

    #include <iostream>
    #include <cmath>

    using namespace std;
    int main()
   {
        double final,power,end_n = 1.0,e=1.0,x=2.0, n;
        cout<< "n: ";
       // usually enter 5 for test
        cin>> n;
        while (n>1){
            power = pow(x,n);
            end_n = end_n*n;
            e= (power/end_n)+e;
            n--;
        }
        final =e+x;
        cout<< final;
      return 0;
    }

4 个答案:

答案 0 :(得分:1)

老实说,我根本不知道你的推理是什么。特定扩展的代码非常简单:

double x;
cin >> x;

double oldres, res=1, top=1, bottom=1;
int iter=1;

do {
  oldres=res;                           // to calculate the difference between iterations

  ++iter;                               // next iteration
  top*=x;                               // multiply by one x for each iteration
  bottom*=(iter-1);                     // multiply by the iteration number for each iteration
  res+=top/bottom;                      // and add the fraction to the result
} while(fabs(res-oldres)>.1);           // while the difference is still large

cout << res;                            // done, show the result

答案 1 :(得分:1)

要非常清楚别人暗示的事情:如果你的循环计算 up 从1到n,那么end_n将等于n!在每一步。但倒计时,它并没有。看一下1到5的例子:

转发

n | n!
1 | 1
2 | 2
3 | 6
4 | 24
5 | 120

向后

n | end_n
5 | 5
4 | 20
3 | 60
2 | 120
1 | 120

由于绝对没有一个分母是正确的,如果你的代码只对某些输入错误,那就太惊讶了 - 实际上它可能只适用于x = 0。

最后,我希望这只是一次学习练习。如果你真的需要e ^ x的值,你应该使用exp(x)

答案 2 :(得分:0)

我认为你很亲密。也许你想要更像这样的东西:

#include <iostream>
#include <cmath>
using namespace std;

double factorial(long n)
{
    double result = n;
    while(--n) result*=n;
}

int main()
{
    long n, power;
    double final, e=1.0, x=2.0;
    cout<< "n: ";
    // usually enter 5 for test
    cin>> n;
    while (n>1)
    {
        power = pow((double)x, (double)n);
        end_n = factorial(n);
        e = (power/end_n)+e;
        n--;
    }
    final = e+x;
    cout<< final;
    return 0;
}

答案 3 :(得分:0)

你实际上可以采用类似Horner的方案,以一种基本的方式使用倒计时

  

1 + x / 1! + x ^ 2/2! + x ^ 3/3! + ... + x ^ n / n! =(((((x / n + 1)* x /(n-1)+1)* x /(n-2)+ ...)* x / 1 + 1

    e = 1.0;
    while (n>0){
        e = e*x/n + 1;
        n--;
    }

e^x1/(e^-x)的近似值与正x进行比较,以确定其准确性。

探索(e^(x/4))^4以获得更好的准确性。