我正在使用浮點型24位來將浮點值存儲在恩智浦編譯器MRK III中。它將24位浮點值作爲3字節十六進制存儲在數據存儲器中。 現在,當我使用IEEE 754浮點轉換將數字從二進制恢復爲真實時,我收到了一些非常奇怪的東西。Float24(24位浮點數)爲十六進制?
讓我把它用一個例子這樣 -
注 - 「因爲我的編譯器支持浮動24位(與浮動32一起),我指定的值這樣的事情」
樣本程序:
float24 f24test;
float f32test;
f32test= 2.9612;
f24test= (float24)f32test;
在調試窗口輸出(全局變量): - (在同一時間數據存儲器)存儲在DM
f32test = 2.961200e+000
f24test = 2.9612e+000
值作爲從調試器捕獲的 -
f32test = 40 3d 84 4d (in hex)
f24test = 02 3d 84 (in Hex)
問題: - 現在,當我試圖將f32test = 40 3d 84 4d (in hex)
二進制&然後回到浮動使用IEEE 754,我可以檢索2.9612。 雖然在我試圖轉換f24test = 02 3d 84 (in Hex)
二進制&然後回到使用IEEE 754浮動,我不能檢索2.9612,而不是一些奇怪的價值。
我期待到這個wiki頁面引用有關浮點運算的 - :http://en.wikipedia.org/wiki/Single-precision_floating-point_format
我很困惑,爲什麼它不浮子24工作,如果我使用的是相同的格式爲1個符號位,8位指數& 15位尾數。 (在浮點數32是1符號位,8位指數& 23位尾數。)
可以讓你們任何一個人幫我從f24test = 02 3d 84 (in Hex)
得到值2.9612 ???
請你,我一直在努力與這個過去15小時:(
預先感謝您:)
您是否可以訪問任何關於恩智浦float24格式的文檔?我在網上找不到任何東西。但是,Pascal Cuoq解釋說,這個問題顯然與8位指數的編碼有關。 – TonyK 2014-11-14 13:51:34
@TonyK是的...我有。由於它對我的項目保密,我不可能分享任何有關這方面的信息,但我希望我對帕斯卡爾·庫克的回覆能夠解釋一些事情。 :) – 2014-11-14 14:15:27
除非您可以找到專門用於轉換該格式的轉換軟件,否則必須將其解構爲符號,偏向指數和分數。然後,您可以使用這些值進行算術運算以生成浮點數。 – 2014-11-14 15:54:49