C++:对于具有 do-while 循环的两个不同函数,为什么 x+=y 在一个函数中给出与 x=x+y 相同的结果,而在另一个函数中却不然?

-1 c++ operators do-while

对于下面的函数,与使用相比,A我使用时得到了不同的结果。前者给出的结果为,后者给出的结果为。est += XXXest = est + XXX1.33227e-158.88178e-16

另一方面,对于B下面的函数,无论我是否使用est += XXX或 ,我都会得到相同的结果est = est + XXX

有人能解释为什么x+=y相当于x=x+yin 函数B而不是 in 吗A

功能A

double A(int nTerm){
    const double PI = 3.141592653589793238463;    
    double est = 0;
    double counter = 0;

    do {
        est += ( 16 * pow(-1,counter) )/ (2*counter+1) * pow((double)1/5, 2*counter+1) 
             - ( 4 * pow(-1,counter) )/ (2*counter+1) * pow((double)1/239, 2*counter+1);
        counter++;  
    } while (counter<=nTerm);
    
    return est-PI;
}
Run Code Online (Sandbox Code Playgroud)

功能B

double B(int nTerm){
    double est = 0;
    double counter = 0;

    do {
        est += counter;
        counter++;  
    } while (counter<=nTerm);

    return est;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*sMM 5

x += y - z相当于x = x + ( y - z ). 你可能写过x = x + y - z. 您需要强制执行优先级。看到这里,加上括号,返回值是一样的。

就您而言,您想要:

est = est + ( ( 16 * pow(-1,counter) )/ (2*counter+1) * pow((double)1/5, 2*counter+1) 
             - ( 4 * pow(-1,counter) )/ (2*counter+1) * pow((double)1/239, 2*counter+1) );
Run Code Online (Sandbox Code Playgroud)

注意:在处理双精度值时,即使它们应该相同,也A + B - C可能有很大不同。请参阅浮点数学是否损坏?A + ( B - C )