我即将失去理智。我一直盯着这几个小时,我无法弄清楚出了什么问题。当我输入值“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;
答案 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
,而不是abs
。 abs
用于整数,并且正在杀死数字的小数部分。或者您可以使用std::abs