计算机体系结构 I 浮点数表示

446 阅读1分钟

浮点数的表示

像十进制的科学计数法一样, 二进制表示浮点数是用x×2yx \times 2^y 的表示方法,下面用一个具体的例子来阐释。

例子

假如用8个bits来表示浮点数, 其中1位为符号位(sign),4位为阶码位, 3位为尾数位。 这样偏置量(Bias)就为 231=72^3-1=7,(3是阶码位-1得到)。 在具体看这个例子之前,先要介绍三种数

  • 非规格化数: 所有阶码位为0的数都为非规格化的数,在非规格化数中, 尾数为尾数字段表示的小数值f, 阶码位1-Bias, 这样的设定是为了让非规格化数到规格化数实现平滑的转变。非规格化数也提供了一种方式来表示0,和那些非常接近0的值。
  • 规格化数: 所有阶码不为0同时也不为最大值(这个例子中是255)的数都为规格化的数。在规格化数中,阶码位为e-Bias, 其中e为阶码字段表示的数值, 尾数为1+f, 这样尾数的范围就是1M21\leqslant M \leqslant 2
  • 特殊值:当阶码全为1时,这个数就是特殊值,其中当尾数字段全为0时,这个数就代表无穷大,反之,则代表NaN(Not a Number)。

下面上例子(例子来源:《深入理解计算机系统》)

IMG_0518.PNG

ps:算诸如0.1120.11_2这样的二进制小数时,其算法就是将小数点右边所有位数所能表示的最大值+1作为分母, 其表示的实际值作为分子,再加上小数点左边表示的整数值即为其表示的浮点值。