我试图围绕这个二进制数字的浮点表示,但我找不到,无论我在哪里,都能找到一个很好的答案。
为什么指数有偏差?
旧的可靠的二元补码方法有什么问题?
我试图查看维基百科关于这个主题的文章,但它所说的只是:“签名值的通常表示会使比较变得更难。”
答案 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)
我相信这张图片会帮助您理解马克·迪金森 (Mark Dickinson) 所说的simply comparing the corresponding bit strings lexicographically, or equivalently, by interpreting those bit strings as unsigned integers and comparing those integers.