為什么要用移碼來表示階碼(指數)呢?
這是為了方便浮點數在進行加減運算時進行對對階操作,也就是比較大小
比如(1.01x2^-1)+(1.11x2^3)這兩個數相加 ,在科學計數法中,通常是將小階向大階看齊。也就是將-1次方變為3次方。
如果用補碼來表示-1:111;用補碼表示3:011;很明顯二進制中111比011大。所以結果會是第一個數大於第二個數,這是明顯不對的。
所以通常是在階的基礎上加上偏置常數,當偏置常數為4時,-1+4=3;3+4=7;所以結果會是第二個數大於第一個數,這樣才正確。
這就是為什么要用移碼來表示浮點數中的階的原因
階碼=移碼=偏移常數+真值
那為什么浮點型用(2^(n-1)-1)而不是(2^(n-1))來作為偏移值呢,比如8位機器數采用127而不是128作為偏移值?
袁春風老師給的解釋是階碼11111110以127作為偏移值轉化為真值為127
而以128作為偏移值轉化為真值為126
可以看出偏移值為127時,真值大一些,也就是可表示范圍會大一點。
本來這里我有個疑問是階碼00000001以127作為偏移值轉化為真值為-126;而以128作為偏移值轉化為真值為-127
這里可以看出當以128位偏移值時真值會更小,也就是小數點后面的數更多。
想了一會后,確實可以說明以127作為偏移值可表示范圍會更大,但是以128作為偏移值精確度會更高