【階碼與尾數】
十進位制中通常乙個浮點數可以用科學技術法來表示,舉例:-306.5可以表示為-0.3065*103
其中 -是符號,指數3是階或稱階碼,0.3065是小數部分 左右段非0包起來的部分是有效值 這裡的有效值是3065,小數部分也稱為尾數,顯然3065也是尾數(-3.87的話 387是有效值 87是尾數)。
因為他可以表示為-3.065*102 也可以表示為-0.03065*104 等,小數部分可以左右「浮動」 但不管小數部分怎麼移動,他的有效值是不變的,都是3065 (不過尾數是變化的)。
【移碼】
於是兩個浮點數相加就先要通過小數點的左右浮動,將階碼對齊,然後進行尾數相加。
s為符號位,exp為指數字,fraction為有效數字。 指數部分即使用所謂的偏正值形式表示(也就是移碼),實際值為表示值與乙個固定值(32位單精度的情況是127)的和。採用這種方式表示的目的是簡化比較。因為,指數的值可能為正也可能為負,如果採用補碼表示的話,全體符號位s和exp自身的符號位將導致不能簡單的進行大小比較。正因為如此,指數部分通常採用乙個無符號的正數值儲存。
單精度的指數部分是-126~+127加上127 ,指數值的大小從1~254(0和255是特殊值)。浮點小數計算時,指數值減去偏正值將是實際的指數大小。
【浮點數的二進位制轉換】
在計算機內部,浮點數都是以二進位制表示的,所以 對於十進位制浮點數,要先轉換為二進位制浮點數,然後分兩步,整數部分的轉換,採用(「除2取餘法」 ) 小數部分採用 (「乘2取整法」)即把小數部分乘2取整,在把取完整數好留下的小數部分在乘2取整,直到小數點後第一位為0,以此類推。
【浮點數的二進位制轉換成十進位制】
與十進位制轉換為二進位制相反,對於浮點數,將小數部分逐位乘2的-n次方,n為小數點後的位數。如 二進位制0.101轉換為十進位制,即1*(1/2)+ 0 *(1/4) + 1*(1/8) = 0.625
【規格化】
為了使有效值和尾數能夠統一,在空間上表達更有效率 有必要將所有浮點數規格化,即浮點數通過調整階碼,寫成小數點前不含有有效數字,小數點後第一位由非0數字表示,舉例-306.5規格化為-0.3065*103 。
二進位制浮點數的規格化方法:
通過調整小數點的階碼使得該數的有效值在1和2之間,既二進位制浮點數的整數部分為1,
例如:0.8125 = 0.1101(2) = 1.101*2(-1)
【舉例】
請將十進位制數0.07525表示為規格化浮點數,階碼(包括階符)為4位二進位制位,尾數(包括)尾符為8位二進位制數,均採用補碼形式。
0.07525表示成二進位制是:
0.07525*2=0.1505 0
0.1505*2=0.301 0
0.301*2=0.602 0
0.602*2=1.204 1
0.204*2=0.408 0
0.408*2=0.816 0
0.816*2=1.632 1
0.632*2=1.264 1
0.264*2=0.528 0
0.528*2=1.056 1
0.0001001101=1.001101*2^-3
由於尾數(包括)尾符為8位二進位制數,所以,0.07525(十進位制)=1.001101*2^-3(二進位制)
階碼=-3+127=124,符號位 指數部分 尾數部分:0 01111100 00110100000000000000000
浮點數與移碼
浮點數就是小數點可以任意浮動的數字。因為在計算機的機器語言中,只有二進位制,機器語言只能識別0和1。所以,計算機也是不可能儲存小數的,那計算機如何表示小數呢,採用一般採用指數表示,如下圖所示。但是指數表示的話表示方法也不盡相同,不停表示方法小數點的位置也不是固定的,因此我們稱計算機中這種指數形式的表...
浮點數階碼的計算和表示
關於ieee754中,一般教材提到階碼都是用移碼表示,計算規則卻是偏置值 階數。舉個栗子 比如說ieee 754的浮點數表示,在32位浮點暫存器中,8.25的16進製表示是多少。我怎麼算都是c1840000h,而答案是c1040000h。這其中的差別就在階碼上。階碼是用移碼表示的。8.25也就是10...
IEEE浮點數尾數向偶捨入
轉 抱歉忘了從 copy的了 例如有效數字超出規定數字的多餘數字是1001,它大於超出規定最低位的一半 即0.5 故最低位進1。如果多餘數字是0111,它小於最低位的一半,則捨掉多餘數字 截斷尾數 截尾 即可。對於多餘數字是1000 正好是最低位一半的特殊情況,最低位為0則捨掉多餘位,最低位為1則進...