Binary 微型浮点格式
我目前正在研究如何将二进制微浮点转换为十进制。我已经在互联网上到处找过了,但到目前为止,似乎没有任何指南对我有帮助。到目前为止,我只知道它有1个符号位,一个5位的超15指数,10个尾数位(还有1个隐含位(我不确定隐含位是什么))并且它使用标准IEEE规则 所以我来这里问这个问题。转换是如何工作的,您是如何计算的?简短回答 更长的答案 在阅读之前,您可以通过阅读有关32位的内容获得一些见解 正如你在问题中所说的,浮点数由三部分组成——符号位、指数和尾数。让我们看看每一个的细节,因为它们适用于您描述的16位微浮点。对于以下内容,我假设您对(未签名)的存储方式有一些了解Binary 微型浮点格式,binary,format,Binary,Format,我目前正在研究如何将二进制微浮点转换为十进制。我已经在互联网上到处找过了,但到目前为止,似乎没有任何指南对我有帮助。到目前为止,我只知道它有1个符号位,一个5位的超15指数,10个尾数位(还有1个隐含位(我不确定隐含位是什么))并且它使用标准IEEE规则 所以我来这里问这个问题。转换是如何工作的,您是如何计算的?简短回答 更长的答案 在阅读之前,您可以通过阅读有关32位的内容获得一些见解 正如你在问题中所说的,浮点数由三部分组成——符号位、指数和尾数。让我们看看每一个的细节,因为它们适用于您描
[] [][][][][] [][][][][][][][][][]
sb exponent mantissa
符号位
这或多或少是不言自明的——它表示表示的是正数还是负数。IEEE规定1
的符号位为负,而0
的符号位为正
指数
指数给出了我们的数量级。您已经指定了5位多余15位。过量-15表示指数的偏移量。为什么会有补偿?通常,我们希望指数能够表示正数或负数。一种方法是减去(或抵消)某个常数。在这种情况下,我们减去15
示例:00110
如果是无符号表示,则表示十进制数6
。然而,在我们的offset-15表示法中,00110
表示6-15
,它等于-9
(十进制)
尾数
尾数的工作方式与常规无符号数非常相似,只是“隐含”位需要一些解释。由于数量级部分已经由指数处理,因此我们也不需要在尾数中表示不同数量级。因此,我们假设尾数是一个二进制数,形式为1.xxxxxxxxx
,x
s为1
s和0
s
示例:0000000001
表示1.0000000001
(二进制),它等于1/2^11
或0.00048828125
(十进制)
把它们放在一起
一旦您了解了如何解码尾数和指数,这就有点像使用二进制而不是十进制:只需将尾数值乘以提升为指数值的2,然后让符号位确定符号
示例:10100011000000
- 尾数位:
;尾数值:1100000000
(bin)或1.11
(dec)1.75
- 指数位:
;指数值:01000
或16-15
(12月)1
- 符号位:
或“负”1
(-1)^sb * mantissa * 2^exponent == -1 * 1.75 * 2^1 = -3.5
这涵盖了浮点数的主要情况,但在IEEE规范中,浮点数可以表示其他数字(以及非数字的东西),即:,和。