計算機浮點數 float 表示

2021-07-10 13:07:24 字數 2013 閱讀 8919

2007-09-09 17:07

3674人閱讀收藏 

舉報

先說說32 位的 float型. 

乙個浮點數 x, 在計算機中表示為:

x = a  *  2

e   

這裡 e 代表指數,  a 代表尾數,   在 計算機內部, 他們都是用二進位制表示的. 其中a 用二進位制的科學表示法

表示, 由於科學表示法第一位總是1 (0除外) , 所以第一位略去不計.  e 表示的時候, 因為要表示出負數, 所以 要加上127 ,  實際運算的時候要減去 127. 

ieee 規定, 32 位 float型被拆開成以下格式, 左邊為高位 : 

0                                 0000 0000                     0000000 00000000 00000000

最高位,第32位            第 31-23位,共8位                第23-1位             

符號位                            指數字                                   尾數字

0為正,1為負               -127~+127                        0~0x 7f ff ff

float 的範圍是 -3.40282 * e38 ~ + 3.40282 * e38

一般在人看來是 十進位制的數, 要轉換成二進位制. 十進位制轉二進位制, 大於1 的部分就是除以2 取餘, 小於1 的部分乘2 取整.

比如 8.5  轉換成二進位制就是 1000.1 , 處理成這一步, 還要用科學表示法表示, 就成了 1.0001 * 23 ,  注意: 由於1.0001 第乙個1 要去掉, 所以成了 0001 , 3 需要加上 127 就成了 130 , 二進位制就是 10000010 套用上面話就表示為: 

0  10000010

0001000 00000000 00000000

16 進製 就是:   0x 41 08 00 00 , 一般來說 , intel 系列的 cpu 都使用的是 小尾存放, 就是 高位元組放在後面, 剛好要掉過來就是:   0x 00 00 08 41 , 這樣就完成了一次浮點數的表示. 

注意: 浮點數 0.0  在計算機中表示為 0x 00 00 00 00 .

那麼浮點數的精度是怎麼回事情呢? 當我們使用二進位制表示 大於1 的部分的時候, 沒有問題, 除以2,一直下去, 最後一位肯定不是1 就是 0; 那麼小數部分呢?  舉個例子, 比如 0.8 

表示    0.8 

* 2 

1.6 - 1 = 0.6           

* 2 

1.2 -1 = 0.2  - 0 

.* 2

0.4 - 0

*2      

0.8 - 0 

這樣就迴圈了 就是說 0.8 的二進位制 就是  0.11000 11000 ......  一直迴圈下去, 而我們計算機如果表示0.8只能取0後面的前幾十位, 這就說明 如果是  0.800....001 (迴圈超過100次) , 它表示出來的值其實是和 0.8 一樣, 所以我們比較float型的數字 用 a == b 其實是不嚴謹的(精度問題), 一般都是 用 abs(a - b) < 0.000001 之類就預設是相等.  

那麼 double型呢? 咱們可以照 float 型的葫蘆 來畫了. 

double 型 只是說 取 64 位, 比float型的位 多一倍

ieee 規定 double 型 , 

第64位             63-54                                                53-1 

符號位            指數字 ( -1024 - 1024)                    尾數字 

所以 double型的範圍是 -1.79769 * e308 ~ +1.79769 * e308

多用了幾位, 表示範圍大了很多, 其實本質跟float型一樣.

計算機浮點數 float 表示

這篇文章講得比較淺顯易懂,所以轉一下。必須對計算機原理的原碼 反碼 補碼 移碼有個清晰的認識,另外參考一下ieee754,否則也會有不明白的地方。括號內為本人看法或觀點。我想浮點數的實現與編譯器也會有很大關係的。前兩天仔細看了看,覺得研究計算機如果不說說如何表示浮點數就太不厚道了.很多人也寫過,這裡...

計算機的浮點數表示

假設有乙個浮點數 float fl 3.14159267 和圓周率很像啊 它在計算中的是怎樣儲存的呢?步驟1 轉換為二進位制表示,浮點數分為整數部分和小數部分,對於該浮點數來說,整數部分為3,浮點數部分為0.14159267.這裡假設fl是4個位元組,32位浮點數表示.十進位制 二進位制 3 000...

浮點數計算機內表示及計算

浮點數即帶有小數的數,是不精確的。在計算機內表示 f 1 s m 2 e s 符號數 e 指數 m 尾數 表示公式 偏移量18 23 1 s 2 p 127 1.m 1271 1152 1 s 2 p 1023 1.m 1023 例如 浮點數4.5計算機內表示為 100.1 1 0 1.001 2 ...