想搞清這個問題,首先要明白十進位制和二進位制的轉換關係
以數字43.21轉換為二進位制進行說明
43/2=21...1
21/2=10...1
10/2=5...0
5/2=2...1
2/2=1...0
1/2=0...1
整數部分:101011
總結:不斷除以基數(2進製的基數是2),倒序取餘數,110101
0.212=0.42 ...0
0.422=0.84 ...0
0.842=1.68 ...1
0.682=1.36 ...1
0.36*2=0.72 ...0
...(一直計算到0.72為0.00停止,就會得到精確數,這也是為什麼計算機在小數計算上出現誤差的原因)
小數部分:0.00110
總結: 不斷乘以基數,正序取整數部分進製,00110
結果:(43.21)10 約等於 (101011.0011)2
二進位制轉十進位制
整數部分:
101011=122222+0+1222+0+12+1=43
小數部分:
0.0011=0(1/2)+0(1/4)+1(1/8)+1*(1/16)=0.1875
結果:43.1875 (101011.0011)2 約等於 (43.21)10
總結:整數字從右至左,依次乘以2的0次方,2的一次方。小數字從左至右,以此乘以2的-1次方,2的-2次方
一圖勝千言,最快的二進位制轉十進位制方法
為什麼計算機中的小數字無法精確
想搞清這個問題,首先要明白十進位制和二進位制的轉換關係 以數字43.21轉換為二進位制進行說明 43 2 21.1 21 2 10.1 10 2 5.0 5 2 2.1 2 2 1.0 1 2 0.1 整數部分 101011 總結 不斷除以基數 2進製的基數是2 倒序取餘數,110101 0.212...
小數儲存到計算機中為什麼會有精度損失
大家應該都知道小數轉二進位制的方法吧,乘2取整,得到積,將積的整數部分取出,再用餘下的小數部分乘2,又得到乙個積,再將積的整數部分取出,如此進行,直到積中的小數為0,或者達到所要求的精度為止。可以看到每次乘2都會取出乙個整數,將這些整數順序排列就能得到小數的二進位制表示。上面的例子乘2最終可以會停止...
小數在計算機中的表示
執行如下 得到結果 你猜是多少呢?嗯你沒有看錯得到的答案是57.所以為什麼會出現這種情況呢?首先需要 的是0.58這個數字是如何在計算機中儲存的。我們一般用下面格式表示浮點數。sp m 其中s是符號位,p是階碼,m是尾數。單精度浮點數是32位,雙精度浮點數是64位。s pm表示公式 偏移量1823 ...