浮点数表示(IEEE-754标准浮点格式)


归纳

浮点数的一般表示形式为:

一个十进制数N可以写成:N = 10e×M

一个二进制数N可以写成:N = 2e×M

其中, M称为浮点数的尾数,是一个纯小数;e是比例因子的指数,称为浮点数的指数,是一个整数。在计算机中表示一个浮点数时,一是要给出尾数M,用小数形式表示;二是要给出指数e,用整数形式表示,常称为阶码。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度;阶码部分指明了小数点在数据中的位置,因而决定了浮点数的表示范围。浮点数也是有符号数.

 |  S  |    E    |    	M		|

S为尾数的符号位;占1位;
E为阶码,紧跟在符号位之后,占m位;
M为尾数,放在低位部分,占n位。

IEEE-754标准浮点格式

IEEE标准从逻辑上采用一个三元组{S, E, M}来表示一个数N,它规定基数为2,符号位S用0和1分别表示正和负,尾数M用原码表示,阶码E用移码表示。根据浮点数的规格化方法,尾数域的最高有效位总是1,由此,该标准约定这一位不予存储,而是认为隐藏在小数点的左边,因此,尾数域所表示的值是1.M(实际存储的是M),这样可使尾数的表示范围比实际存储多一位。为了表示指数的正负,阶码E通常采用移码方式来表示,将数据的指数e 加上一个固定的偏移量后作为该数的阶码,这样做既可避免出现正负指数,又可保持数据的原有大小顺序,便于进行比较操作。

目前,大多数高级语言都按照IEEE-754标准来规定浮点数的存储格式。IEEE-754标准规定,单精度浮点数用4字节(即32位)存储,双精度浮点数用8字节(即64位)存储,如图2-3所示:

单精度格式(32位):符号位(S)1位;阶码(E)8位,阶码的偏移量为127(7FH);尾数(M)23位,用小数表示,小数点放在尾数域的最前面;

双精度格式(64位):符号位(S)1位;阶码(E)11位,阶码的偏移量为1023(3FFH);尾数(M)52位,用小数表示,小数点放在尾数域的最前面。

在IEEE-754标准中,一个规格化的32位浮点数X的真值可表示为:

X = (-1)s×(1.M)×2 E-127       e = E-127  
 E为阶码即指数的真值

在IEEE-754标准中,一个规格化的64位浮点数X的真值可表示为:

X = (-1)s×(1.M)×2 E-1023       e = E-1023        
  E为阶码即指数的真值

例如:

-1280采用IEEE-754标准单精度浮点数格式表示为:
C4808000H

由于双精度格式的原理与单精度格式相同,仅仅是表示的位数有所增加,所以,下面主要介绍单精度格式(32位)浮点数的表示方法。

当一个浮点数的尾数为 0,不论其阶码为何值,或者当阶码的值遇到比它所能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。


特别的


当阶码E为全0且尾数M也为全0时,表示的真值X为零,结合符号位S为0或1,有正零和负零之分。当阶码E为全1且尾数M也为全0时,表示的真值X为无穷大(∞),结合符号位S为0或1,有+∞和-∞之分。这样,在32位浮点数表示中,要除去E用全0和全1(255)表示零和无穷大的特殊情况,因此,阶码E的取值范围变为1~254,指数的偏移量不选128(10000000B),而选127(01111111B)。对于32位规格化浮点数,真正的指数值e为-126~+127,因此,数的绝对值的范围是2-126~2127≈10-38~1038。

你可能感兴趣的:(计算机系统基础)