2017-05-12 133 views
-1

請問有人可以解釋一下,在計算機機器/硬件/計算器中如何得出兩個操作順序產生不同結果?計算機中的浮點計算

序列1
第1步:1/3
步驟2:(步驟1的結果)* 3
回答= 1個

序列2
步驟1:0.3333333333(高達可能的入口)
步驟2:(步驟1的數目)* 3
回答= 0.9999999999

據我知道,當浮動號碼不能被精確地通過計算機中儲存的或表示的100%。如果序列1正在產生舍入值,那麼爲什麼不序列2或者是否存在特殊處理1/3,2/3的校驗的任何harwired算法?

我已經在移動計算器,Windows計算器應用程序,Microsoft Excel表中試過。所有結果都一樣。

+2

因爲1/3不同於0.3333333333 ... –

+0

但是我們知道內存的固定大小有限,所以存儲.33333會導致一些截斷。那麼它如何以不同的方式處理 – Bhupendra

+0

你打了多少三分?例如,在一種常見的格式中,您需要大約16個三分之一才能得到與計算1/3相同的近似值。 –

回答

0

許多計算器使用十進制並使用固定數量的數字。例如,如果我們使用七位十進制數字計算1/3,則得到.3333333。這已被舍入到七位數。當我們乘以3時,我們得到.9999999。由於結果是七位數,所以它適合我們的七位數寬度,並且沒有舍入。

算法的許多計算機實現使用二進制,也使用固定數量的數字。例如,如果我們使用七個二進制數字計算1/3,則得到.0101011。這也是四捨五入以適應我們的七位數字,並且四捨五入,因爲在我們四捨五入的位置,我們不得不輪迴的比例超過1/2。當我們乘以3時,確切的答案是1.0000001。這有八位數字,所以我們將它四捨五入到七位數,產生1.000000。 (在這種情況下,我們舍入點處的分數恰好爲1/2,因此規則爲舍入因此下一個數字爲偶數,因此我們向下舍入爲0.)

我使用了七數字只是爲了這些例子。通常,計算機浮點運算使用小數部分的53個二進制數字(對於double類型,對於float,使用24個二進制數字)。計算器使用的小數位數有所不同,但通常超過七位。