序列的求和

Summation of a series

本文关键字:求和      更新时间:2023-10-16

这是我的代码,我正在尝试计算这个系列:((-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哪个代码无法正确计算它。 我从这里计算了系列。有什么特殊功能可以做求和吗?

确保在使用变量之前对其进行初始化。之后你初始化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

  • 使用前始终初始化变量。double sum1 = 0;

  • ((i) / (i + 1))执行整数除法,则结果对任何i都是0的。

  • 用于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;
}

试试这个

for (i = 0; i <= 5; i++) // from 0 to 5 inclusively
sum1 += (pow(-1, i)) * (static_cast<double>(i) / (i + 1));