众所周知,科学计数法既可以表示整数,也可以表示小数,并且表示的数据范围很大。
   在计算机中也引入了类似于十进制科学计数法的方法来表示实数,称为浮点数表示法,因其小数点位置不固定而得名。

   1.浮点数的表示方法。

   用浮点数表示法不仅可以表示整数和纯小数,而且可以表示一般的实数,其表示范围比定点数要大得多。因为无论采用定点还是浮点表示,n位编码总是最多只能表示2n个数,所以采用浮点表示法虽然扩大了表示范围,但并没有增加可表示的数值的个数,只是数据间的间隔变稀疏了。
   
      一种浮点数的格式:

      | Ms | Es | El-2 |...| E0 | M-1 | M-2 |...| M-(m-1) |
         数符  阶符   阶           码   尾                      数

   可见,浮点数的编码由两部分组成:阶码E和尾数M。浮点数表示的数值位:(-1)Ms · M · BE.
   其中,B是阶码的底,也就是尾数M的基数,一般为2。
   E为阶码,即指数,为带符号的定点整数,常用移码表示,其中,Es为阶符,表示阶的正负。如果用移码表示阶码E,当阶码被作为一个无符号整数对待时,其数的大小相对关系不变,为浮点数加减法时的对阶运算提供了方便。
   M是尾数,是定点纯小数,常用补码表示,也有用原码表示的。Ms是尾数的符号位,安排在最高位,表示该浮点数的正负。

   浮点数的表示范围主要由阶码决定,精度则由尾数决定。

   2.规格化浮点数。

   为了简化浮点数的操作,充分利用尾数的二进制位数来表示更多的有效数字,通常采用浮点数规格化形式,即将位数的绝对值限定在某个范围之内。一个规格化的数是一个有效数的最高有效位非0的数。
   如果阶码的底为2,则规格化浮点数的尾数应满足条件:1/2<=|M|<1。
   当尾数用补码表示时,若尾数M>=0,由于[1/2]=0.10000..0 ,尾数应具有如下格式:
               M=0.1xxxx...x(其中x表示既可以为0也可以为1)

   若尾数M<0,由于[-1/2]=1.10000..0,[-1]=1.00000..0,为使计算机判断方便,一般不把[-1/2]列为规格化的数,而把[-1]列为规格化的数,因此尾数应具有格式M=1.0xx...x,即:符号位为1,小数点右侧的第一数值位为0时为规格化数。

   这样:当M<0时,[-1]<=[M]<[-1/2]

   规格化操作有两种,“左规”和“右规”。若采用变形补码表示尾数,则当结果的尾数出现11.1xx..x或00.0xx..x的形式时,需将尾数左移1位,阶码减1,即111.xx..x或000.xx..x,直到尾数规格化为止,这个过程叫做“左规”。当浮点运算结果的位数出现01.xxx..x或10.xxx..x的形式时,并不一定溢出,应先将尾数右移一位,阶码+1,再判断是否溢出,这个过程叫做“右规”。

   若采用上述规格化浮点数格式,以2位底,阶码L位(含一位阶符),用移码表示;尾数m位(含一位数符),则浮点数能表示的

   最小正数:  +(1-2-(m-1))·2(2^(l-1)-1)

   最大正数:  +(2-2^(l-1))/2

   最大负数:  -(1/2+2-(m-1))·2-2^(l-1).

   最小负数:  -1·22^(l-1)-1

   当一个数的大小超出了浮点数的表示范围时,称为溢出。溢出判断只是对规格化的浮点数的阶码进行判断。当阶码小于机器能表示的最小阶码时,称为下溢,此时一般当做机器零处理,机器继续运行;当阶码大于机器所能表示的最大阶码时,称为上溢,这是机器必须转入溢出故障的中断处理程序进行相应的处理


                                  零
    负上溢  |  可表示的负数  |  负下溢 | 正下溢 | 可表示的正数 | 正上溢

    IEEE754标准规定浮点数的尾数用原码(符号加绝对值)表示,对于用原码表示的规格化的二进制浮点数,尾数有效位的第一位一定是1,而不是0,因此这个默认的1也省去了,从而使得有效位又增加一位,这样,23位尾数的有效位长度实际是24位。
    IEEE单精度浮点格式具有24位有效字符,字宽32位(1位符号,8位阶码,23位尾数);双精度浮点格式具有53位幼小数字精度,字宽64位(1位符号,11位阶码,52位尾数)。
    IEEE754标准另外一个特点是用特殊记号标记某些异常事件,记录非规格化数,正无穷,负无穷,以及非数。

    在IEEE754标准中,基数隐含为2;阶码用移码表示,移码的偏移值并不是通常n位移码所用的2n-1,而是2n-1-1,这是因为尾数规格化后必须为0.100..0,而我们现在尾数用1.000..00表示,即尾数左移1位,所以阶码偏移值为2n-1-1。
    

               IEEE754 单精度格式位模式表示的值

        0<e<255             |          (-1)s·2e-127·1.f   (规格化数)

        e=0,f!=0            |          (-1)s·2e-126·0.f    (非规格化数)

        e=0,f=0             |          (-1)s·0            (有符号的0)

        s=0;e=255,f=0       |            正无穷

        s=1;e=255;f=0       |            负无穷

        s=u,e=255,f!=0      |           非数