for语句之奇偶求和问题错例

img

#include 
#include 
#include 
using namespace std;
int main()
{
    int n ;//定义n项
    cin >> n;

    double sum = 0;//要用double型累加器

    for(int i = 1; i <= n ; i++)
    {
        double ai = pow( -1 , i-1 ) * (1 / i * 1.0) ;//递推公式(结果要浮点型,所以要乘1.0)
        sum += ai;
    }
    cout << fixed << setprecision(4) << sum << endl;
    return 0;
}

img

为什么我用代码算一下和机器用代码算的不一样?

(i*1.0)这里用括号包括起来试试看,要不就是精度设置那里的问题。望采纳哦!!!

可能是i=2时,1/i * 1.0=1/2 * 1.0=0 * 1.0=0,所以导致与你的不一样。将double ai = pow( -1 , i-1 ) * (1 / i * 1.0) ;这句改成 double ai = pow( -1 , i-1 ) * (1.0 / i * 1.0) ;

程序会先计算 1 / i(整形) 再 乘上 1.0
应该用 1.0 / i才会变成浮点型

第14行,修改为:double ai = (i % 2 == 0) ? (-1.0 / i) : (1.0 / i);