浮點數(shù)計算中的精度問題
猜測下面的代碼的輸出是什么
#include <stdio.h>
int main()

{
double x, y, z;
double sum;
x = 1e20f;
y = -1e20f;
z = 10.0f;
sum = x + z + y;
printf ("sum=%f\n",sum);
}
在VS2005下測試,結(jié)果是
sum=0.000000
而如果調(diào)換一下連加計算式中z和y的位置則結(jié)果為
sum=10.000000
可以得出兩點:
1 浮點數(shù)預(yù)算會有精度損失,大數(shù)會掩蓋小數(shù),所以當(dāng)進行多個浮點數(shù)求和時,應(yīng)該從小到大相加。
2 多個數(shù)連加,操作順序是從左至右進行的。

