我正在使用浮点型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