小數二進制和十進制轉換

十進制轉換二進制

規則:將該數字乘以2,取出整數部分作爲二進制表示的第1位;然後再將之前所得的數小數部分乘以2,將得到的整數部分作爲二進制表示的第2位;以此類推,直到小數部分爲0。顯然就會發現小數部分一直不等於0的情況,這時候就得到一個無限位數的二進制小數點,計算機就無法完整保存所以就出現了所謂的浮點誤差。
比如2.30換成二進制
0.3 * 2 = 0.6 ——————- 0
0.6 * 2 = 1.2 ——————- 1
0.2 * 2 = 0.4 ——————- 0
0.4 * 2 = 0.8 ——————- 0
0.8 * 2 = 1.6 ——————- 1
0.6 * 2 = 1.2 ——————- 1
所以二進制爲:10.01001100110011……
比如2.75換成二進制
0.75 * 2 = 1.5——————- 1
0.5 * 2 = 1.0 ——————- 1
所以二進制爲:10.11

二進制轉換十進制

這部分和整數部分差不多。乘以相應位數的負值方比如
上面的

10.11001100110011=121+020+121+122+023+=2.30 10.11001100110011……=1*2^{1}+0*2^{0}+1*2^{-1}+1*2^{-2}+0*2^{-3}+…………=2.30
10.11=121+020+121+122=2.75 10.11=1*2^{1}+0*2^{0}+1*2^{-1}+1*2^{-2}=2.75

傳說中的浮點誤差

由上面兩個例子可以知道
2.30二進制爲:10.01001100110011……

如果計算機只能保存四位那麼就保存了前四位10.01,再次讀取出來時轉爲十進制就是2.25,誤差賊大

但是

2.75的二進制爲:10.11
如果計算機只能保存四位那麼就保存了前四位10.11,再次讀取出來時轉爲十進制就是2.75,沒有誤差

如果能保存八位呢2.30保存爲10.010011,再次讀取出來時轉爲十進制就是2.296875,,再和原來一樣保留兩位小數點就是2.29,越來越接近2.30了,學過無窮級數會知道,這是無窮級數相加會越來越接近。但是取出來後只保留兩位小數點,所以到2.9之後多接近都是2.9除非去掉的部分四捨五入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章