为什么我们偏置浮点数的指数?

时间:2013-11-08 17:10:36

标签: floating-point ieee-754 exponent

我试图围绕这个二进制数字的浮点表示,但我找不到,无论我在哪里,都能找到一个很好的答案。

为什么指数有偏差?

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

我试图查看维基百科关于这个主题的文章,但它所说的只是:“签名值的通常表示会使比较变得更难。”

3 个答案:

答案 0 :(得分:24)

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

0011111111110001100110011001100110011001100110011001100110011010

0.01被编码为位串

0011111110000100011110101110000101000111101011100001010001111011

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

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

另一个观察是,使用所选编码,浮点数+0.0被编码为完全由零组成的位字符串。

答案 1 :(得分:3)

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

使用二进制补码表示,指数值的范围为-1024到1023,我们必须保留其中两个来处理零,次正规,无穷大和NaN。这留下了-1023到1022的范围。这样, x 的间隔使得 x 及其倒数几乎可以表示几乎为2 -1023 < / sup>至2 1023 。因此,偏置布置提供了更有用的值范围。

答案 2 :(得分:0)

enter image description here

我相信这张图片会帮助您理解马克·迪金森 (Mark Dickinson) 所说的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