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