为什么这段代码没有正确计算sin(x)?

时间:2014-04-23 00:09:47

标签: c++ math sin

我即将失去理智。我一直盯着这几个小时,我无法弄清楚出了什么问题。当我输入值“1”时,我得到的是和为1,这意味着它只通过迭代一次,但我不知道为什么看到abs(term)应该大于“较小的”。

我试图在给定用户输入x的情况下计算sin(x)。

double sum = 0.0;
double term = 0.0;
double n = 1.0;
double x = 0.0;
double lesser = 1.0e-15;


while (true)
{
    std::cout << "\nEnter radian value of x:";
    std::cin >> x;
    if (x == 999)
        return 0;

    term = x;
    sum = 0.0;
    n = 1.0;

    while (abs (term) >= lesser)
    {
        sum = sum + term;
        n = n + 1.0;
        term = -term * (x/n);
        n = n + 1.0;
        term = term * (x/n);

    }
    std::cout << "\nApproximation for sin(0) is is: " << sum;
}


return 0;

2 个答案:

答案 0 :(得分:3)

std::abs函数适用于整数类型。您可能应该使用std::fabs

while (fabs (term) >= lesser) {
   ...
}

代码中可能还有其他错误,但是这个错误可能会导致循环提前退出,因为abs会将范围(0,1)中的值舍入为0. fabs避免此

或者,使用<cmath>标头而不是<math.h>标头,或明确调用std::abs<cmath>为浮点值导出abs的重载。

希望这有帮助!

答案 1 :(得分:0)

使用fabs,而不是absabs用于整数,并且正在杀死数字的小数部分。或者您可以使用std::abs