無意之中使用python(2.6、2.7)計算了一串加法:
51.2 + 61.0 + 78.5 + 64.1 + 30.3 + 52.4 + 12.0 + 46.0 + 83.6
得到的結果卻是:
479.0999999999999
大吃一驚!
然後換種語言計算,使用c語言:
float sum = 51.2f + 61.0f + 78.5f + 64.1f + 30.3f + 52.4f + 12.0f + 46.0f + 83.6f;
printf("sum = %f\n", sum);
輸出結果:
sum = 479.099976
額,這個。。。
然後同樣使用c語言,但使用雙精度浮點數:
double sum = 51.2 + 61.0 + 78.5 + 64.1 + 30.3 + 52.4 + 12.0 + 46.0 + 83.6;
printf("sum = %f\n", sum);
輸出結果:
sum = 479.100000
這回看上去正確了。
由於浮點數在機器表示中是離散值,大部分小數只能是它的近似值,因此浮點數的運算存在誤差,這是不可避免的,在程式設計中不能忽略這個問題,特別是對計算精度有很高的要求的時候。
在使用高階語言程式設計時,還是盡量用雙精度或者更高精度的浮點數,單精度還是盡量不要用了吧。如有必要還需使用專門的庫。
另外,python的浮點運算有點坑。。。
出乎意料的else語句
在python中你可能時不時不碰到else語句用在while和for迴圈中,請不要驚訝,先看看它的作用吧!實際上在迴圈語句中,else子句只會在迴圈完成後執行,即跳出迴圈的操作,如break,同時也會跳過 else塊。下面是乙個來自python核心程式設計的例子 def showmaxfactor ...
出乎意料的else語句
在python中你可能時不時不碰到else語句用在while和for迴圈中,請不要吃驚,先看看它的作用吧!實際上在迴圈語句中,else子句僅僅會在迴圈完畢後執行。即跳出迴圈的操作。如break,同一時候也會跳過 else塊。以下是乙個來自python核心程式設計的樣例 def showmaxfact...
浮點數加法
include includechar input 2 1000 int n char point1 1000 point2 1000 char int1 1000 int2 1000 int pointans 1000 int intans 1000 bool pointcarry int foo...