我想了解單精度IEEE格式的二進制加法。二進制加法IEEE格式
例如,考慮
2^-20 + 2^-17
如何添加他們的情況?我是否應該先將它們轉換成10進制的10進制數,然後這樣做?但後來我再次獲得9位數字,並且由於電腦可以代表7位數字,我該如何擺脫其他兩位?那麼如何增加呢?任何閱讀材料也會非常有用。
我想了解單精度IEEE格式的二進制加法。二進制加法IEEE格式
例如,考慮
2^-20 + 2^-17
如何添加他們的情況?我是否應該先將它們轉換成10進制的10進制數,然後這樣做?但後來我再次獲得9位數字,並且由於電腦可以代表7位數字,我該如何擺脫其他兩位?那麼如何增加呢?任何閱讀材料也會非常有用。
找到一個很好的解釋數據格式的來源。
從兩個數字中提取一位符號,8位指數和23位存儲尾數。
如果任何指數爲0xff,那麼該數字爲NaN(如果存儲的尾數不爲零)或Infinity(如果存儲的尾數爲0)。在所有涉及Infinity和NaN的案例中查找您應該返回的結果並返回結果。完成。
除非指數爲0(零或非規格化數),否則在尾數的位置23添加隱含的前導1位,爲您提供正確的24位尾數。
比較指數。將尾數較小的數字向右移動正確的位數,但跟蹤所有移出的位。
根據符號加上或減去尾數,包括移出的位。
如果尾數和所有被移出的位都是零,那麼結果是+0或-0。檢查IEEE規則以找出哪一個。只有(-0)+(-0)給-0,其他所有+0。完成。
如果尾數的比特24被設置,那麼結果向右移位,並通過增加指數1.
只要尾數的比特23被清除,指數不爲零移位的結果,以左邊並將指數降低1.
如果您移出尾數的位的最高位被設置,並且如果有更多位移出或尾數的最低位爲1,則增加尾數減1,如果設置了24位,則將其右移1位並增加指數。
如果指數爲0xff,則結果爲+ Infinity或-Infinity。完成。
否則清除尾數位23並將符號,指數和尾數組合成結果。
嗯,非常感謝您的回答?但是,我該如何繼續尋找相對誤差呢? – user2792941
@ user2792941:您一直計算相對誤差的相同方式:'abs((approximate_value - exact_value)/ exact_value)'。如果你不清楚如何計算相對誤差,我建議'math.stackexchange.com'作爲更合適的地方。 –
這個答案缺少關於如何用適當的四捨五入模式舍入到24位的所有細節(例如,round-tie-to-even或其他),也缺少關於subnormals的細節。真的,我認爲用SO格式回答這個問題不是一個好方法,除非我們在某個地方給出一個單一的完整答案。當這些東西被記錄在其他許多地方時,這似乎是多餘的。 –