0

我正在查看一個C++任務,它讀取一個包含十進制數字的文件,並將每個數字作爲單個4字節float存儲在數據結構中。在更改過程(使用double)之前,我想知道文件中的數字與結構中存儲的數字之間的平均誤差百分比。將小數存儲爲單個浮點數時的預期誤差是多少?

例如,如果該文件讀取19.5和數據結構是19.49999999則錯誤是

abs(19.49999999/19.5 - 1) = 5.128205128205128e-8 % 

如果分發事項,大部分的文件中的數字是正的和小於1000

+0

你想讓我們給你一個數字的估計嗎?或者你想讓我們告訴你如何編寫一個程序來真正衡量它?或者是什麼? –

回答

4

32位浮點數有23位尾數,這意味着精確到7-8位十進制數的表示。確切地說,相對誤差是2^-24或約6e-8

+0

要理解數學,2^-23是最差的錯誤,2^-24是平均錯誤? – ytoledano

+1

不,我相信2^-24是最糟糕的錯誤。數學上精確的結果是無限的二進制分數。一個「浮點」值包含這個分數的前23位,正確舍入。所以最差的錯誤是23位的值的一半,即2^-24。但是我必須承認,我很可能會離開。有關基礎理論,請參閱[「每位計算機科學家應瞭解的浮點算術知識」](http://www.validlab.com/goldberg/paper.pdf) –

+0

結果的確應該正確舍入。讀取小數輸入並將其舍入到正確的二進制小數並不重要,但也不是不合理的。 – MSalters

相關問題