【问题标题】:How does exponent bias make comparison easier指数偏差如何使比较更容易
【发布时间】:2016-05-08 06:04:56
【问题描述】:

我正在阅读关于exponent bias 浮点数的this 文章,它说如下:

n IEEE 754 浮点数,指数在 这个词的工程意义 - 存储的值与 指数偏差的实际值。偏置是因为指数 必须是有符号的值才能代表两个微小的 和巨大的价值,但二进制补码,通常表示 有符号的值,会使比较更难。为了解决这个问题 指数在存储之前是有偏差的,通过调整它的值来放 它在适合比较的无符号范围内。通过安排 字段,以便符号位位于最高有效位位置, 中间的有偏差的指数,然后是最少的尾数 有效位,结果值将正确排序, 它是否被解释为浮点或整数值。这 允许使用固定浮点数进行高速比较 点硬件。

我还从维基百科的article 中找到了关于偏移二进制的解释:

这导致“零”值由 1 表示 在最高有效位中,在所有其他位中为零,并且通常 效果与使用二进制补码很方便,除了 最高有效位被反转。也有后果 在逻辑比较操作中,得到相同的结果 使用二进制补码数值比较运算,而在 二进制补码符号 逻辑比较将与二进制一致 补数比较运算当且仅当 被比较的符号相同。否则的感觉 比较将被反转,所有负值都被视为 大于所有正值。

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

【问题讨论】:

    标签: binary


    【解决方案1】:

    这里的'Comparison'指的是通常按大小比较数字:5 > 4等。假设浮点数存储为as

    [sign bit] [unbiased exponent] [mantissa]
    

    例如,如果指数是一个 2 的补码 3 位二进制数,而尾数是一个 4 位无符号二进制数,你就会有

    1 010 1001 = 4.5
    1 110 0111 = 0.21875
    

    您可以看到第一个大于第二个,但要弄清楚这一点,计算机必须计算 1.001 x 2^20.111 x 2^(-2),然后比较得到的浮点数。这对于浮点硬件来说已经很复杂了,如果这台计算机没有这样的硬件,那么......

    所以数字存储为

    [sign bit] [biased exponent] [mantissa]
    

    对指数使用相同的 3 位二进制数(这次有偏差;参见 a related question)和无符号的 4 位尾数,我们有

    1 101 1001 = 4.5
    1 001 0111 = 0.21875
    

    但是现在比较很容易!您可以将这两个数字视为整数 1101100110010111 并看到第一个显然更大:即使对计算机也是如此,因为整数比较很容易。这就是使用有偏指数的原因。

    【讨论】:

    • 谢谢,非常感谢您的努力,这对我帮助很大!最后,我想我已经掌握了这个主题:)。澄清一下,为什么将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 偏置指数software.intel.com/en-us/articles/intel-sdm
    • 另外,为什么 IEEE 使用多余的 2^(n-1)-1 而不是 2^(n-1)?对于后者,您需要做的就是将 MSBit 从 2-补码表示中反转。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2019-10-17
    • 2013-12-02
    相关资源
    最近更新 更多