我试图理解为什么二进制偏移表示法中的偏移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
。有人可以解释为什么我们还减去额外的一个?
答案 0 :(得分:1)
我发布这个作为更好地解释我的思想的答案,但即使我会引用标准几次,我也没有找到明确说明的理由。
在下文中,我将参考IEEE 754标准(以及浮点表示的成功修订),即使OP没有提及它(如果我错了,请告诉我)。
问题在于浮点数中指数的特定表示。
在子条款 3.3浮点数据集中说(强调我的):
在a中可表示的有限浮点数集 特定格式由以下整数参数确定:
- b =基数,2或10
所有格式的
- p =有效数字中的位数(精度)
- emax =最大指数 e
- emin =最小指数 eemin 应为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 所以一个更大的(即使只有一个)最大指数可以处理大的指数。