我正在使用float 24位将浮点值存储在NXP的编译器MRK III中。它将24位浮点值作为3字节的十六进制存储在数据存储器中。现在,当我使用IEEE 754浮点转换将数字从二进制恢复为实数时,我得到了一些非常奇怪的东西。
让我用一个例子来说明这一点-
注意-“由于我的编译器支持浮点数24位(以及浮点数32),因此我正在分配类似这样的值。”
示例程序:
float24 f24test;
float f32test;
f32test= 2.9612;
f24test= (float24)f32test;
在调试窗口中输出(全局变量):
f32test = 2.961200e+000
f24test = 2.9612e+000
从调试器捕获的同时存储在DM(数据存储器)中的值-
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
我很困惑,如果我对1个符号位,8位指数和15位尾数使用相同的格式,为什么它不适用于float 24。(在浮点数32中,它是1个符号位,8位指数和23位尾数。)
你们中的任何人都可以帮助我从f24test = 02 3d 84 (in Hex)
???退回值2.9612吗?
请做,过去15个小时我一直在为此苦苦挣扎:(
先感谢您:)
f32test = 40 3d 84 4d(十六进制)
f24test = 02 3d 84(十六进制)
在IEEE 754浮点格式中,浮点指数以bias值存储。显然,设计您所指的24位浮点格式的人都不会选择使用与IEEE 754二进制32中使用的偏置系统相同的偏置系统,因为尽管两者的指数均以8位表示(根据您)。
在32位表示中,指数用位0x80表示,对于2到4之间的值表示,这听起来是正确的。
您可以从24位格式的指数的偏差为0x04的假设开始,并使用更多的值进行确认。单个值不足以让我们理解不是IEEE 754标准一部分的24位浮点格式,并且显然是通过一些特殊选择来设计的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句