C++ 为什么';这段代码不能正确计算sin(x)?

C++ 为什么';这段代码不能正确计算sin(x)?,c++,math,trigonometry,C++,Math,Trigonometry,我快要失去理智了。我已经盯着这个看了好几个小时了,我想不出是怎么回事。当我输入一个值“1”时,我只得到和是1,这意味着它只经过了一次迭代,但我不知道为什么看到abs(术语)应该大于“lesser” 我试图在给定用户输入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 &l

我快要失去理智了。我已经盯着这个看了好几个小时了,我想不出是怎么回事。当我输入一个值“1”时,我只得到和是1,这意味着它只经过了一次迭代,但我不知道为什么看到abs(术语)应该大于“lesser”

我试图在给定用户输入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;
double sum=0.0;
双项=0.0;
双n=1.0;
双x=0.0;
双较小值=1.0e-15;
while(true)
{
std::cout>x;
如果(x==999)
返回0;
项=x;
总和=0.0;
n=1.0;
而(绝对值(术语)>=较小值)
{
总和=总和+期限;
n=n+1.0;
术语=-术语*(x/n);
n=n+1.0;
术语=术语*(x/n);
}

std::coutstd::abs
函数在整数类型上工作。您可能应该使用
std::fabs

while (fabs (term) >= lesser) {
   ...
}
代码中可能还有其他错误,但此错误可能会导致循环提前退出,因为
abs
会将范围(0,1)内的值舍入为0。
fabs
避免了这一点

或者,使用
标题而不是
标题,或者显式调用
std::abs
导出浮点值的
abs的重载


希望这有帮助!

使用
fabs
,而不是
abs
abs
是用于整数的,并且正在消除数字的小数部分。或者你可以使用
std::abs

我建议阅读以更好地了解如何调试它。如果我将
\include\n\include\nint main()\n{
在顶部,
}
在底部,将
abs
更改为
std::abs
。我由此得出结论,问题在于
abs
的定义。这是从哪里来的?@dionadar你从哪里得到的?@Paulpro哇,我的天哪bad@Zack这很有帮助,但仍然不太正确。如果我输入一个像10这样的值,它会无限循环。要吗我需要将绝对值声明为双abs?
\include
重载
std::abs
以正确处理类型
int
long
long
float
double
。但是
include
不正确。@aschepler,我不知道。谢谢你让我这么做知道!