这是我的代码,我正在尝试计算此系列:((-1)^n)*n/(n+1)
,n从1
到5
,代码无法正常工作,任何人都可以帮忙吗? >
int main(){
int i,n;
double sum1;
for (i=1; i<6; i++)
sum1 += (pow(-1,i))*((i)/(i+1));
cout<<sum1;
return 0;
}
最后的真实答案必须等于-0.6166666666666667
,这是代码无法正确计算出来的。
我从here计算了序列。有什么特殊功能可以求和吗?
答案 0 :(得分:2)
始终在使用前初始化变量。 double sum1 = 0;
((i) / (i + 1))
执行整数除法,对于任何0
,结果均为i
。
pow
函数以查找-1
的幂是非常不合理的int main() {
int i;
double sum1 = 0;
double sign = -1;
for (i = 1; i < 6; i++)
{
sum1 += sign * i / (i + 1);
sign *= -1.0;
}
std::cout << sum1;
return 0;
}
答案 1 :(得分:2)
在使用变量之前,请确保对其进行初始化。之后您初始化i
,这样就可以了,但是sum1
需要初始化:
double sum1 = 0.0;
对于求和,即使将结果分配给double
,中间结果也可能不是,并且整数除法结果将被截断。因此,应使用双字面量(例如2.0
而不是2
),并在适用的情况下强制转换i
:
sum1 += (pow(-1, i))*(((double)i) / ((double)i + 1.0));
最后,为了获得所需的精度,可以在打印中使用std::setprecision
。最终结果可能如下所示:
int main() {
int i;
double sum1 = 0.0;
for (i = 1; i < 6; i++)
sum1 += (pow(-1, i))*(((double)i) / ((double)i + 1.0));
std::cout << std::setprecision(15) << sum1 << std::endl;
return 0;
}
输出:
-0.616666666666667
答案 2 :(得分:-1)
试试看
for (i = 0; i <= 5; i++) // from 0 to 5 inclusively
sum1 += (pow(-1, i)) * (static_cast<double>(i) / (i + 1));