【发布时间】:2015-01-11 20:26:45
【问题描述】:
我使用 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 位尾数使用相同的格式,我很困惑为什么它不适用于浮点 24。 (在 float 32 中,它是 1 个符号位、8 位指数和 23 位尾数。)
谁能帮我从f24test = 02 3d 84 (in Hex)取回2.9612的值???
拜托,过去 15 个小时我一直在努力解决这个问题 :(
提前谢谢你:)
【问题讨论】:
-
您是否有权访问有关 NXP float24 格式的任何文档?我在网上找不到任何东西。但正如 Pascal Cuoq 解释的那样,问题显然在于 8 位指数的编码。
-
@TonyK 是的……我有。由于它对我的项目保密,因此我不可能分享任何有关这方面的信息,但我希望我对 Pascal Cuoq 的回复能解释一些事情。 :)
-
除非您能找到专门用于转换该格式的转换软件,否则您必须将其解构为符号、有偏指数和分数。然后,您可以使用这些值进行算术运算以生成浮点数。
标签: floating-point floating-accuracy floating-point-precision floating floating-point-conversion