在
http://radovi.javaeye.com/blog/322096這篇博客里談到計算機計算浮點數時的舍入誤差,我也在VS2005下進行了相應的實驗,如下代碼:
#include <iostream>

using namespace std;

int main()


{
double f = 4.35;

int a = int(f*100);

cout << a << endl;

system("pause");
}
的確打印出來的結果是434.
老男孩給出的解釋是這樣的:
這個問題和二進制的表示有很大關系
簡單地說
計算機不能準確表示諸如1/10等一類分數
我查到了一篇文章:
http://support.microsoft.com/kb/214118/zh-cn,如下,
IEEE 754 標準是一種方法很容易操作的壓縮方式存儲浮點數。 Intel coprocessors 和實現浮點數學的大多數基于 PC 的程序使用此標準。
IEEE 754 指定編號,以減少存儲要求,并允許該內置二進制算法指令來處理數據以相對較快速的方式的所有微處理器上可用的二進制格式存儲。 但是,是簡單的、 非重復的十進制數字的某些數字轉換為重復不能存儲的完美的準確性的二進制數字。
例如數 1 / 10 可以表示簡單小數的十進制數字系統中:
.1
但是,二進制格式中的數目將十進制重復的二進制文件:
0001100011000111000111 (和這樣上)
此數字無法表示按有限數量的空間。 因此,此數字向下舍入的大約-2.78E-17 存儲。
如果獲取給定的結果執行多個的算術運算,這些舍入誤差可能具有累積性。
看來是和二進制的表示有很大關系。
posted on 2009-04-15 13:38
Sandy 閱讀(2575)
評論(1) 編輯 收藏 引用 所屬分類:
c++學習