在泰勒级数展开中动态地表示负输出 - > C ++

时间:2015-03-05 17:58:07

标签: c++ c++11 math taylor-series

我正在学习编码,所以请原谅我提出这样一个基本问题(必须从某处开始,对吧?)我编写了以下C ++程序,该程序近似于e ^ x系列扩展(泰勒系列)。

我遇到的问题是输出。我需要的样本输出之一如下:

示例运行5:

该程序使用n项系列扩展近似e ^ x。 输入在e ^ x->的近似值中使用的术语数。 8 输入指数(x) - > -0.25

e ^ -0.25000 = 1.00000 - 0.25000 + 0.03125 - 0.00260 + 0.00016 - 0.00001 + 0.00000 - 0.00000 = 0.77880

但我的代码改为创建以下输出:

e ^ -0.25000 = 1.00000 + -0.25000 + 0.03125 + -0.00260 + 0.00016 + -0.00001 + 0.00000 + -0.00000 = 0.77880

基本上,我不确定如何动态表示这些负值,以匹配所需的输出。目前,他们都由" +"我的代码中的字符串文字,在重复的递归术语之间。

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int numTerms, i;
long double x, numer, denom, prevDenom, term, sum;

int main ()
{
    cout << "This program approximates e^x using an n-term series expansion." << endl;
    cout << "Enter the number of terms to be used in the approximation of e^x-> ";
    cin >> numTerms;
    cout << "Enter the exponent(x)-> ";
    cin >> x;
    cout << endl;

        if (numTerms <= 0)
            cout << numer << " is an invalid number of terms." << endl;
        else if (numTerms == 1)
        {
            sum = 1.00000;
            cout << "e^" << fixed << setprecision(5) << x << " = " << sum << " = " << sum << endl;
        }
        else
        {
            cout << "e^" << fixed << setprecision(5) << x <<" = " << 1.00000;
            sum += 1.00000;
            prevDenom = 1;
            for (i = 1; i < numTerms; i++)
            {
                numer = pow(x,(i));
                denom = (prevDenom) * (i);

                term = numer / denom;

                sum += term;
                prevDenom = denom;
                cout << " + " << term;
            }
            cout << " = " << fixed << setprecision(5) << sum << endl;
        }
}

提前致谢!

1 个答案:

答案 0 :(得分:4)

您可以替换:

cout << " + " << term;

使用:

if (term >= 0)
    cout << " + " << term;
else
    cout << " - " << (-term);

因此,当一个术语为负数时,您可以使用所需的额外空间自行打印减号,然后打印出术语的正面部分。