【问题标题】:Why do we bias the exponent of a floating-point number?为什么我们偏向浮点数的指数?
【发布时间】:2013-11-20 19:10:28
【问题描述】:

我正试图围绕二进制数的浮点表示来思考问题,但无论我在哪里看,我都找不到这个问题的好答案。

为什么指数有偏差?

古老的可靠二进制补码方法有什么问题?

我试图查看 Wikipedia 上有关该主题的文章,但它只说:“带符号值的通常表示方式会使比较变得更加困难。”

【问题讨论】:

  • 同一篇文章说,两句话后,“通过排列字段,使符号位在最高有效位位置,偏置指数在中间,尾数在最低有效位,结果值将被正确排序,无论它被解释为浮点数还是整数值。这允许使用定点硬件对浮点数进行高速比较。另见stackoverflow.com/questions/2612775/…

标签: floating-point ieee-754 exponent


【解决方案1】:

相信这张图会帮助你理解马克·狄金森所说的simply comparing the corresponding bit strings lexicographically, or equivalently, by interpreting those bit strings as unsigned integers and comparing those integers.

https://en.wikipedia.org/wiki/Offset_binary

【讨论】:

    【解决方案2】:

    IEEE 754 编码有一个方便的特性,即可以通过简单地按字典顺序比较相应的位串,或等效地,通过将​​这些位串解释为无符号整数并比较这些整数来在两个正的非 NaN 数之间执行顺序比较。这适用于从 +0.0 到 +Infinity 的整个浮点范围(然后扩展比较以考虑符号是一件简单的事情)。因此,例如在 IEEE 754 二进制 64 格式中,1.1 被编码为位串(msb 优先)

    0011111111110001100110011001100110011001100110011001100110011010
    

    0.01 被编码为位串

    0011111110000100011110101110000101000111101011100001010001111011
    

    按字典顺序出现在1.1 的位字符串之前。

    为此,具有较小指数的数字需要在具有较大指数的数字之前进行比较。一个有偏的指数使这项工作有效,而以二进制补码表示的指数将使比较更加复杂。我相信这就是维基百科评论适用的内容。

    另一个观察结果是,通过选择的编码,浮点数 +0.0 被编码为一个完全由零组成的位串。

    【讨论】:

    • 如果你有一个补码整数硬件,整个数字范围都会正确排序
    【解决方案3】:

    我不记得具体细节,但有些人希望最高指数比最低正态指数稍微远离零。这增加了 x 及其倒数都可以近似表示的值的数量。例如,对于 IEEE-754 64 位二进制浮点,正常的指数范围是 -1022 到 1023。这使得最大的有限可表示值正好在 21024 之下,因此 1024 的区间为em>x 及其倒数都可以近似表示为几乎 2-1024 到几乎 21024。 (此区间极低端的数字低于正常值,因此会丢失一些精度,但它们仍然可以表示。)

    使用二进制补码表示,指数值的范围从 -1024 到 1023,我们必须保留其中两个来处理零、次正规、无穷大和 NaN。剩下的范围是 -1023 到 1022。这样,x 的区间使得 x 及其倒数都可以近似表示,几乎是 2-1023 到 21023。因此,有偏差的排列提供了更大的有用值范围。

    【讨论】:

    • 在我看来,这个答案更多的是关于选择要表示的值,而不是关于位编码。仍然可以对指数字段使用二进制补码而不是有偏指数(保留位模式1000000000010000000001 用于表示无穷大、nan、零和次正规),而不会影响可表示值的集合.
    • @MarkDickinson:是的,目标是选择要表示的值。偏见给了你这样的选择。偏差是一个可调参数;您可以将其设置为给出所需的一组表示值的值。这就是为什么它比二进制补码更可取的原因,它固定了编码的指数值。 (使用要保留的值是一个杂项,破坏了所有位为零表示零的属性,并破坏了您在答案中记下的排序属性。)
    猜你喜欢
    • 2019-01-23
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2020-07-30
    相关资源
    最近更新 更多