在
http://radovi.javaeye.com/blog/322096這篇博客里談到計(jì)算機(jī)計(jì)算浮點(diǎn)數(shù)時(shí)的舍入誤差,我也在VS2005下進(jìn)行了相應(yīng)的實(shí)驗(yàn),如下代碼:
#include <iostream>

using namespace std;

int main()


{
double f = 4.35;

int a = int(f*100);

cout << a << endl;

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