cout问题(C ++)

时间:2013-02-12 03:13:44

标签: c++ cout

我正在努力找出问题所在:

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

using namespace std;

double fact(double);
double sinTaylor(double);
double cosTaylor(double);

int main()
{
    double number, sineOfnumber, cosineOfnumber;

    cout << "Enter a number, then I will calculate the sine and cosine of this number" << endl;

    cin >> number;

    sineOfnumber = sinTaylor(number);
    cosineOfnumber = cosTaylor(number);

    cout << fixed << endl;
    cout << cosineOfnumber << endl;
    cout << sineOfnumber << endl;

    return 0;
}

double fact(double n)
{
    double product = 1;
    while(n > 1)
     product *= n--;
    return product;
}

double sinTaylor(double x)
{
    double currentIteration, sumSine;

    for(double n = 0; n < 5; n++)
    {
        currentIteration = pow(-1, n)*pow(x, 2*n+1) / fact(2*n+1);
        sumSine += currentIteration;
    }
    return sumSine;
}

double cosTaylor(double y)
{
    double currentIteration, sumCosine;

    for(double n = 0; n < 5; n++)
    {
        double currentIteration = pow(-1, n)*pow(y, 2*n) / fact(2*n);
        sumCosine += currentIteration;
    }
    return sumCosine;
}

好的,所以这是我的代码。我很满意。除了一件事: 在调用sinTaylor和cosTaylor之后,sineOfnumber和cosOfnumber将在下面的cout行中相互添加,它们将相互打印。 换句话说,如果数字等于,即.7853,1.14将打印在打算用于打印cosineOfnumber的行中,并且sineOfnumber将正常打印结果。 任何人都可以帮我确定这是为什么?非常感谢你!

2 个答案:

答案 0 :(得分:4)

您是否曾在函数中初始化变量sumSine和sumCosine?它们不能保证从零开始,所以当你在循环中调用+ =时,可能会将计算值添加到垃圾中。

尝试将这两个变量初始化为零并查看会发生什么,除此之外代码似乎没问题。

答案 1 :(得分:0)

正弦系列是(抱歉LaTeX):

sin(x) = \sum_{n \ge 0} \frac{x^{2 n + 1}}{(2 n + 1)!}

如果你看,给定术语t_ {2 n + 1}你可以计算术语t_ {2 n + 3}为

t_{2 n + 3} = t_{2 n + 1} * \frac{x^2}{(2 n + 2)(2 n + 3)}

因此,给定一个术语,您可以轻松地计算下一个术语。如果你看一下余弦的系列,它就是相似的。由此产生的程序更有效(没有重新计算因子),可能更精确。当将浮点数加起来时,将它们从最小值添加到最大值更精确,但我怀疑这会在这里产生影响。