Binary 指数偏差如何使比较更容易

Binary 指数偏差如何使比较更容易,binary,Binary,我正在读一篇关于浮点数中的指数偏差的文章,上面说: n IEEE 754浮点数,指数在 单词的工程意义–存储的值与 指数偏差的实际值。由于指数 必须是有符号的值,才能同时表示这两个值 和巨大的价值,但二的补充,通常代表 带符号的值会使比较变得更困难。为了解决这个问题 在存储指数之前,通过将其值调整为put,使其有偏差 它在适合于比较的无符号范围内。通过安排 字段,使符号位处于最高有效位位置, 中间偏指数,最小尾数 有效位,结果值将正确排序, 无论它被解释为浮点值还是整数值。这 允许使用固定值对浮

我正在读一篇关于浮点数中的指数偏差的文章,上面说:

n IEEE 754浮点数,指数在 单词的工程意义–存储的值与 指数偏差的实际值。由于指数 必须是有符号的值,才能同时表示这两个值 和巨大的价值,但二的补充,通常代表 带符号的值会使比较变得更困难。为了解决这个问题 在存储指数之前,通过将其值调整为put,使其有偏差 它在适合于比较的无符号范围内。通过安排 字段,使符号位处于最高有效位位置, 中间偏指数,最小尾数 有效位,结果值将正确排序, 无论它被解释为浮点值还是整数值。这 允许使用固定值对浮点数进行高速比较 点硬件

我还从维基百科的关于偏移量二进制的文章中找到了这样的解释:

其结果是“零”值由1表示 在最高有效位和所有其他位中为零,以及 其效果与使用二的补语相同,只是 最高有效位被反转。这也有其后果 在逻辑比较操作中,得到的结果与 使用2的补码数值比较运算,而 二的补码表示法逻辑比较与二的补码表示法一致 当且仅当数字 被比较有相同的标志。否则的话 比较将被反转,所有负值都被视为 大于所有的正值


我真的不明白他们在谈论什么样的比较。有人能用一个简单的例子解释一下吗?

这里的“比较”指的是通常按大小对数字进行的比较:5>4等。假设浮点数存储为

[sign bit] [unbiased exponent] [mantissa]
例如,如果指数是2的补码3位二进制数,尾数是4位无符号二进制数,则

1 010 1001 = 4.5
1 110 0111 = 0.21875
你可以看到第一个比第二个大,但是为了解决这个问题,计算机必须计算
1.001 x 2^2
0.111 x 2^(-2)
,然后比较得到的浮点数。浮点硬件已经很复杂了,如果这台计算机没有这样的硬件,那么

因此,该数字存储为

[sign bit] [biased exponent] [mantissa]
使用相同的3位二进制数作为指数(这次有偏;请参阅)和无符号4位尾数,我们得到

1 101 1001 = 4.5
1 001 0111 = 0.21875

但是现在比较起来很容易!您可以将这两个数字视为整数
11011001
10010111
,并且可以看到第一个数字明显更大:即使对于计算机来说也是如此,因为整数比较很容易。这就是为什么使用有偏见的指数。

谢谢,非常感谢你的努力,这对我帮助很大!最后,我想我已经掌握了这个主题:)。需要澄清的是,为什么要将
1 010 1001
转换为
1.001 x 2^2
,而不是
1.1001 x 2^2
?浮点AFAIK不存储前导位,因此我们在表示科学形式时必须添加它。@Maximus真实答案:我不知道:)真实听起来但错误的答案:它使事情更容易说明。在第一个示例中,如果将符号位设为1,则它应该是-4.5,而不是4.5。其次,必须将基点移动到第一个1之前而不是之后,即1001而不是1.001。好吧,如果你不定义规则,那没关系。事实上,这就是为什么我们采用IEEE格式来表示浮点数的全部原因。似乎连《英特尔软件开发人员手册》都弄错了:“这意味着在实际指数中添加了一个常数,使得有偏指数始终是正数。”英特尔64和IA-32体系结构软件开发人员手册第1卷:基本体系结构4.8.2.2。此外,为什么IEEE使用多余的
2^(n-1)-1
而不是
2^(n-1)
?对于后者,您需要做的只是将MSBit从2-补码表示中反转。