系列总结

时间:2019-02-20 10:50:11

标签: c++

这是我的代码,我正在尝试计算此系列:((-1)^n)*n/(n+1),n从15,代码无法正常工作,任何人都可以帮忙吗? >

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计算了序列。有什么特殊功能可以求和吗?

3 个答案:

答案 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));