对于下面的函数,与使用相比,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)
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 )