Float24(24位浮点数)转换为十六进制?

普雷特克·德旺安

我正在使用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个小时我一直在为此苦苦挣扎:(

先感谢您:)

帕斯卡·库克(Pascal Cuoq)

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Javascript中将64位十六进制转换为十进制浮点数

PHP将十六进制转换为浮点数

将十六进制转换为浮点数

将浮点数转换为十六进制格式

浮点数转换为C中的24位整数

Python如何将浮点数十六进制转换为十进制

如何在python中将16位十六进制和二进制表示形式转换为十进制浮点数(反之亦然)?

如何将十六进制转换为浮点数

C ++将4个十六进制值转换为浮点数

如何在python中将十六进制值转换为浮点数

将十六进制字符串转换为浮点数

如何在Perl中将浮点数转换为十六进制字符串?

将十六进制转换为C中的浮点数

如何在 Node.js 中将 4 字节十六进制转换为浮点数

十六进制转换为浮点数-JS中的Big Endian(ABCD)

将数字(也可以是浮点数)转换为十六进制,反之亦然

如何在 VB.NET 中将浮点数转换为十六进制?

将十六进制文件转换为php中的浮点数

如何使用 C# 将十六进制转换为浮点数

如何将十六进制切片转换为带二进制补码的浮点数

长十六进制值拆分为 2 个字节的十六进制值或 4 个字节的十六进制值,并使用 VB.Net 将其转换为十进制(浮点数)值

打印浮点数的内部十六进制

将浮点数表示为十六进制

如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

JavaScript-将24位十六进制数字转换为十进制,加1,然后再转换回?

将浮点十六进制转换为在Ruby中浮点

为什么mpfr_printf与printf的十六进制浮点数(%a转换说明符)不同?

将十六进制编码的浮点数解码为本机浮点值

将十六进制转换为浮点SQL