24

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

为什么指数有偏?

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

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

4

3 回答 3

25

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

0011111111110001100110011001100110011001100110011001100110011010

while0.01被编码为位串

0011111110000100011110101110000101000111101011100001010001111011

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

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

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

于 2013-11-08T18:23:01.710 回答
3

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

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

于 2013-11-08T17:38:48.120 回答
0

在此处输入图像描述

相信这张图会帮助你理解马克·狄金森所说的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

于 2021-04-14T09:37:56.097 回答