1. 程式人生 > >浮點數計算注意精度問題

浮點數計算注意精度問題

最近看書看到一個簡單的題,

問,下面程式執行結果是什麼?

#include <stdio.h>

int main(int argc, char *argv[]) {
	double i;
	for (i = 0; i != 10; i += 0.1) {
		printf("%.1f\n", i);
	}
	return 0;
}


主觀以為是輸出0~10之間一位小數點的小數

但不是,這是個陷阱,其實是無限迴圈

搜尋網友解釋 http://blog.sina.com.cn/s/blog_6da76f9b0100yr8d.html

接下來呼叫gdb輸出中間結果來觀察,發現 i 自加0.1後,並不是我們預想的等於0.1,而是等於 0.10000000000000001.  再往下執行幾次,  i 的值分別是0.20000000000000001,  0.30000000000000004,     0.40000000000000002

等我研究gdb後再來試試