为什么偏移量被计算为“2 ^ {n-1} - 1”而不是“2 ^ {n-1}”用于浮点指数表示

时间:2016-08-16 17:52:43

标签: binary

我试图理解为什么二进制偏移表示法中的偏移K计算为 对于浮点指数表示,2^{n-1}-1代替2^{n-1}。以下是2^{n-1}的推理。

四位可以表示[-8;7]范围内的值,因此0000代表-8。此处的零偏移为8,可以计算为2^{n-1}。使用此偏移量,我们可以定义任何数字的表示形式,例如,数字3

我们需要向-8添加哪个号码才能获得3?它是11,因此偏移二进制中的3表示为1011。公式似乎是number to represent + offset

但是,实际公式为number to represent + offset - 1,因此正确的表示形式为1010。有人可以解释为什么我们还减去额外的一个?

1 个答案:

答案 0 :(得分:1)

我发布这个作为更好地解释我的思想的答案,但即使我会引用标准几次,我也没有找到明确说明的理由。

在下文中,我将参考IEEE 754标准(以及浮点表示的成功修订),即使OP没有提及它(如果我错了,请告诉我)。

问题在于浮点数中指数的特定表示。

在子条款 3.3浮点数据集中说(强调我的):

  

在a中可表示的有限浮点数集   特定格式由以下整数参数确定:

     

- b =基数,2或10
   - p =有效数字中的位数(精度)
   - emax =最大指数 e
   - emin =最小指数 e

     所有格式的

emin 应为1 - emax

后来它指定:

  

最小正正常浮点数是 b emin 和   最大的是 b emax ×(b - b 1 - p 。幅度小于 b emin 的格式的非零浮点数   被称为次正常,因为它们的大小介于两者之间   零和最小的正常幅度。

3.4二进制交换格式编码

  

二进制交换格式中的浮点数据的表示形式在以下三个字段(...)中的 k 位中编码:
   a)1位符号S
   b) w -bit偏差指数 E = e +偏差
   c)(t = p-1)位尾随有效位字段数字串 T = d 1 d 2 ... d p - 1 ;有效数字的前导位d 0 ,在偏置指数 E 中隐式编码   (...)
  编码的偏差指数 E 的范围应包括:
   - 1到2之间的每个整数 w - 2,包括在内,用于编码正常数字
   - 保留值0以编码±0和次正常数字
   - 保留值2 w - 1编码±∞和NaNs。

例如,32位浮点数具有以下参数:

k, storage width in bits                      32
p, precision in bits                          24
emax, maximum exponent e                     127
emin, minimum exponent e                    -126
bias, E − e                                  127
w, exponent field width in bits                8
t, trailing significand field width in bits   23

this Q&A中指出:“偏见的目的是使指数以无符号形式存储,从而更容易进行比较。”

考虑到上面提到的32位浮点表示,正常(不是次正规)数字的编码偏差指数 E 的范围在1到254之间。

为了扩展可表示数字的范围,在指数范围内特定选择范围-126,127的原因可能是:表示非常低的数字subnormals 所以一个更大的(即使只有一个)最大指数可以处理大的指数。